防抖和节流有什么区别,怎么写,应用场景

区别:防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。

1.防抖(debounce):触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间

1.登录短信验证防止用户点击太快,多次请求数据
2.文本编辑器实时保存,当无任何更改操作一秒后进行保存
3.银行转账,支付,防止多次支付

//防科debounce代码,
		function debounce(fn,delay) {
			var timeout = null;//创刨建一个标记用来存放定时器的返回值
			return function (e){
			//每当用户入的时候把前一个 setTimeout cLear瘁
			clearTimeout(timeout);
			//然后又创建一个新的 setTimeout,这样姚能保证interval 同隔内如集时闾持续触发,姚不会执行 fn 函数
			timeout = setTimeout(( =>{
				fn.apply(this,arguments);}, delay);
			};
		}
		//处理函数
		function handle() {
			console.log("防抖:',Math.random();
		}
		//滚动事件
		window. addEventListener( " scroll', debounce(handle, 500));
2.节流(thorttle):高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率

1.scroll 事件,每隔一秒计算一次位置信息等
2.input 框实时搜索并发送请求展示下拉列表,没隔一秒发送一次请求 (不同的应用场景下也可做防抖)
3.监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断

//节流throttLe代码:
		function throttle(fn,delay) {
			let canRun = true;//逸过湖包保存一个标记
			return function () {
			//在函数开头判断标记是否为true,不为true 到return
			if ( !canRun) return;
			//立即设置为faLse
			canRun = false;
			//将外部传入的函数的执行放在setTimeout中
			setTimeout(()=>{
				//最后在setTimeout执行完毕后再把标记设置为true(关)表示可以执行下一次循环了。
				//当定时器没有执行的时候标记永远是false,在开头被return掉
				fn.apply(this,arguments);
				canRun = true;
			},delay);
		};
		function sayHi(e){
			console.log('节流: ', e.target.innerwidth,e.target.innerHeight);
		}
		window .addEventListener( 'resize", throttle(sayHi , 500));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值