首页 > 其他分享 >防抖和节流

防抖和节流

时间:2022-08-27 20:11:32浏览次数:43  
标签:function count 防抖 节流 inp var 函数

防抖和节流

防抖

/*
	应用场景: 当用户进行了某个行为(如点击)之后,不希望每次行为都会触发方法,而是行为做出后,一段事件内没有再次重复行为,才给用户响应.
	实现原理: 每次触发事件时设置一个延时调用方法,并且取消之前的延时调用方法
*/

快捷实现: lodash

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入第三方文件 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
	</head>
	<body>
		<input type="text" id="inp">
		<script>
			// 当前使用第三方js库实现防抖效果
			//  _
			// _.debounce(function,delay)
			var  inp = document.getElementById("inp");
			var  count = 0;
			// 使用内置的防抖函数
			inp.oninput =  _.debounce(search,1000)
			
			function  search(){
				count++;
				console.log("发起了"+count+"次请求");
			}
			
		</script>
	</body>
</html>

自定义:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" id="inp">
		<script>
			// 封装自定义防抖函数
			/**
			 * @param {function} func 执行业务逻辑的函数
			 * @param {number} delay   延迟函数执行的时间
			 */
			function  myDebounce(func,delay){
				// func  ==  search  函数
				// delay  == 1000
				
				var  timer;
				return  function(){
					var a = arguments; //获取实参集合 伪数组
					var t = this;
					// 先清除原来的那个执行方法的定时器
					clearTimeout(timer);
					
					timer = setTimeout(function(){
						func.apply(t,a)
					},delay)
				}
				
			}

			// 使用自定义函数实现防抖效果
			var  inp = document.getElementById("inp");
			var  count = 0;
			// 使用自定义的防抖函数
			inp.oninput =  myDebounce(search,1000)
			
			function  search(e){
				count++;
				console.log("发起了"+count+"次请求");
			}
		
		</script>
	</body>
</html>

节流

概述:

/*
	应用场景:用户进行高频事件触发(滚动),但会限制在n秒内只会执行一次。
	实现原理: 每次触发时间的时候,判断当前是否存在等待执行的延时函数
*/

快捷实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入第三方文件 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
	</head>
	<body>
		<input type="text" id="inp">
		<script>
			// 当前使用第三方js库实现节流效果
			//  _
			// _.throttle(function,delay)
			var  inp = document.getElementById("inp");
			var  count = 0;
			// 使用内置的节流函数
			inp.oninput = _.throttle(search,1000)
			
			function  search(){
				count++;
				console.log("发起了"+count+"次请求");
			}
			
		</script>
	</body>
</html>

自定义:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" id="inp">
		<script>
			// 封装自定义节流函数
			/**
			 * @param {function} func 执行业务逻辑的函数
			 * @param {number} delay   延迟函数执行的时间
			 */
			function  myThrottle(func,delay){
				
				var ctime = 0; // 初始时间
				return   function(){
					//获取触发当前函数的时间戳
					var ntime = new  Date().getTime();
					
					if( ntime - ctime > delay ){
						func.apply(this,arguments);
						ctime = ntime; //0 ==>第一次触发函数的时间 
					}
				}
			}
			
			// 使用自定义函数实现节流效果
			var  inp = document.getElementById("inp");
			var  count = 0;
			// 使用自定义的节流函数
			inp.oninput =  myThrottle(search,1000)
			function  search(e){
				count++;
				console.log("发起了"+count+"次请求");
			}

		</script>
	</body>
</html>

区别:

区别:节流不管事件触发多频繁保证在一定时间内一定会执行一次函数。防抖是只在最后一次事件触发后才会执行一次函数

标签:function,count,防抖,节流,inp,var,函数
From: https://www.cnblogs.com/ashuang/p/16631359.html

相关文章

  • 事件节流
    事件节流用于控制事件触发的最小间隔。如一个事件100毫秒内只能触发一次。如窗口缩放过程中对页面的元素大小重新调整,因为resize事件的触发是非常快的,用户虽然在频繁......
  • Java中字节流的总结及代码练习
    Java中的字节流在描述字节流时,先知道什么是流流可以分为:输入流和输出流输入流和输出流示意图:字节流读取内容:二进制,音频,视频优缺点:可以保证视频音频无损,效率低,没有缓......
  • js函数节流(Throttle)
    在浏览器DOM事件里面,有一些事件会随着用户的操作不间断触发。比如:重新调整浏览器窗口大小(resize),浏览器页面滚动(scroll),鼠标移动(mousemove),输入框监听(oninput)等。也就是说......
  • JavaIO流---字节流和字符流
    1.字节缓冲流1.1字节缓冲流构造方法【应用】字节缓冲流介绍lBufferOutputStream:该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不......
  • 练习6:节流和防抖实现
    节流函数节流指的是某个函数在一定时间间隔内(例如3秒)只执行一次,在这3秒内无视后来产生的函数调用请求,也不会延长时间间隔。3秒间隔结束后第一次遇到新的函数调用会......
  • 防抖和节流的介绍及实现
    防抖概述:在规定时间内只执行一次(执行最后一次)举个例子:电梯关门案例a进入电梯等待5s后就可以上升了在a等待了4s中后b过来那么之前的等待就结束了开始新的等待......
  • 闭包节流和防抖
    <style>div{width:200px;height:200px;background-color:skyblue;margin:50pxauto;}</style><div></di......
  • js防抖和节流实现
    1、防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间举例:就好像在百度搜索时,每次输入之后都有联想词弹出,这个控制联想......
  • element下拉框远程搜索debounce防抖控制
    一、需求:下拉框支持远程搜索,根据用户输入字符,调接口获取数据渲染到下拉列表上,供用户选择。二、为什么要做防抖控制?在做远程搜索时,如果每输入1个字就调用1次接口,就会频繁......
  • js | 防抖&&节流
    正常:事件触发非常频繁,每一次触发,回调函数都会执行,如果时间很短,回调函数中有计算,有可能会出现浏览器卡顿防抖:前面所有的触发都会取消,最后一次的执行在规定的时间......