js防抖和节流区别及实现方式(防抖节流应用场景)
在处理高频事件的时候,类似于window的resize或者scorll,或者input输入校验等操作时。如果直接执行事件处理器,会增大浏览器的负担,轻微的会产生抖动,严重的直接卡死,用户体验非常不好,面对这种情况,我们一般可以采用防抖和节流的方式减少调用频率。同时也不会影响实际效果。
一、js防抖
1、防抖的作用是:
在事件被触发的n秒后执行回调,如果在这n秒内又被触发,则重新计时。
2、应用场景:
input校验:在input输入完成后,不需进行额外操作(比如:点击按钮,或者blur事件),而是需要敲完代码通过keydown事件触发校验程序。此时如果不作处理,会导致校验程序频繁触发,影响用户体验。
3、防抖的实例代码如下:
<input type="text" onkeydown="checkout(this)" /> <script> var timer = null // 防抖:当持续时间触发时。一定时间内没有再触发事件,事件处理函数才会执行一次 function debounce (fn, delay) { clearTimeout(timer) timer = setTimeout(fn, delay) } // 校验方法在 1秒内 无操作后执行 function checkout (input) { debounce(function(){ ifCompliance(input.value) },1000) } // 校验方法,长度小于 7 不规范 function ifCompliance (val) { if(val && val.length < 7){ alert("不符合规范") } } </script>
二、js节流
1、节流的作用是:
在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
2、应用场景:
如果在一个页面中有很多张图片,就可能会使用懒加载技术,即监听滚动条的改变,而加载图片。为了避免一直触发滚动事件的处理程序,可以使用节流。
3、节流的实例代码如下:
// 打印 scroll 的日志 function scrollLog () { console.log('scrollLog') } // 节流:持续触发事件时,规定在一定时间内只会发生一次。 function throttle (fn, delay) { var startTime = Date.now() return function () { var curTime = Date.now() if (curTime - startTime >= delay) { fn && fn() startTime = Date.now() } } } window.addEventListener('scroll', throttle(scrollLog, 1000))
js防抖和节流的小知识就介绍到这里。
除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址:https://tangjiusheng.cn/js/5209.html
原文地址:https://tangjiusheng.cn/js/5209.html
大家都在看