防抖与节流

防抖与节流

防抖

在事件被触发n秒后再执行回调,如果在这n秒内又被触发或不停触发,只响应最后一次,则重新计时,重新触发定时器。
防抖类似于英雄联盟回城6秒,如果回城中被打断,再次回城需要再等6秒。
应用场景:
1. search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
2. window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次。

实现代码:

<body>
	<input type="text" id="inp">
	<script>
		// 1.封装防抖函数
		function debounce(fn, time) {
			// 4.创建一个标记用来存放定时器的返回值
			let timeout = null;  // 使用闭包,缓存变量
			return function () {
				// 5.每当用户触发input事件  把前一个 setTimeout 清楚掉
				clearTimeout(timeout);
				// 6.然后又创建一个新的 setTimeout, 这样就能保证输入字符后等待的间隔内 还有字符输入的话,就不会执行 setTimeout里面的内容
				timeout = setTimeout(() => {
					// 7.这里进行防抖的内容
					fn();
				}, time);
			};
		}

		// 2.获取inpt元素
		var inp = document.getElementById('inp');
		// 8. 测试防抖临时使用的函数
		function sayHi() {
			console.log('防抖成功');
		}
		// 3.给inp绑定input事件  调用封装的防抖函数  传入要执行的内容与间隔事件 
		inp.addEventListener('input', debounce(sayHi, 1000));
	</script>
</body>

节流

高频率触发的事件,在指定的单位时间内,只响应第一次。
节流类似于英雄联盟里的英雄平A 一定是内点击多次只进行攻击一次。
应用场景:

1. 鼠标不断点击触发,mousedown(单位时间内只触发一次)。
2. 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。

实现代码

<script>
	// 1.封装节流函数
	function throttle(fn, time) {
		//3. 通过闭包保存一个 "节流阀" 默认为false
		let temp = false;
		return function () {
			//8.触发事件被调用 判断"节流阀" 是否为true  如果为true就直接trurn出去不做任何操作
			if (temp) {
				return;
			} else {
				//4. 如果节流阀为false  立即将节流阀设置为true
				temp = true; //节流阀设置为true
				//5.  开启定时器
				setTimeout(() => {
					//6. 将外部传入的函数的执行放在setTimeout中
					fn.apply(this, arguments);
					//7. 最后在setTimeout执行完毕后再把标记'节流阀'为false(关键)  表示可以执行下一次循环了。当定时器没有执行的时候标记永远是true,在开头被return掉
					temp = false;
				}, time);
			}
		};
	}
	function sayHi(e) {
		// 打印当前 document 的宽高
		console.log(e.target.innerWidth, e.target.innerHeight);
	}
	// 2.绑定事件,绑定时就调用节流函数  
	// 敲黑板!!! 这里是重点 绑定是就要调用一下封装的节流函数 触发事件是触发封装函数内部的函数
	window.addEventListener('resize', throttle(sayHi, 2000));
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7cccccc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值