js中的防抖和节流

本文深入探讨了JavaScript中的防抖(debounce)和节流(throttle)技术,这两种技术常用于优化高频触发的事件处理,如input输入和scroll滚动。防抖能确保在用户停止操作后才执行函数,而节流则限制了执行频率,每隔一定时间执行一次。通过示例代码展示了如何实现防抖和节流函数,并应用到实际场景中,如input事件的处理和窗口resize事件监听。
摘要由CSDN通过智能技术生成

基本概念

  1. 防抖:将多次执行变为最后一次执行。
  2. 节流:将多次执行变为每隔一段时间执行。
    都是防止某一时间内频繁触发

主要使用场景

  1. 防抖:input
  2. 节流:scroll

基本代码

  1. 防抖代码:
function debounce(fn, t){
	let delay = t || 500;
	//创建一个标记用来存放定时器的返回值
	let time = null; 
	return (...args)=>{
		// 每当用户输入的时候把前一个 setTimeout clear 掉 
		if(time) clearTimeout(time); 
		// 然后又创建一个新的 setTimeout, 这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话,就不会执行 fn 函数
		time = setTimeout(() => {
			fn.call(this, args);
		}, delay)
	}
}
//处理函数
function Top(){
  console.log('防抖'+new Date());
}
// 滚动事件
window.addEventListener('scroll', debounce(Top, 1000));
  1. 节流代码:
function throttle(fn,t) {
	let delay = 500 || t;
    let time,last; // 通过闭包保存一个标记
    return (...args)=> {
        let now = +new Date()
   	 	// 将多次执行变为每隔一段时间执行
        if(last && now < last + delay){
        	clearTimeout(time)
        	time = setTimeout(()=>{
        		last = now
        		fn.apply(this,args)
        	},delay)
        }else{
        	last = now
        	fn.apply(this,args)
        }
    };
}
 
function sayHi(e) {
    console.log('节流:', e.target.innerWidth, e.target.innerHeight);
}
window.addEventListener('resize', throttle(sayHi,500));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值