标签:触发 面试题 节流 scollTop 防抖 timer scrollTop showTop
主要来看一下面试经常被问道的防抖和节流
1.防抖
防抖在我理解来其实就是事件触发时在n秒后调用事件绑定的方法,如果n秒内再次触发这个事件,那么重新计时。
下面以浏览器的滚动条为例,如果有这样一个需求 :我需要监听用户浏览器的滚动事件,返回用户距离顶部的距离,那么可以用一下代码实现:
function showTop() {
let scollTop = document.body.scrollTop || document.documentElement.scrollTop
console.log(scollTop);
}
window.onscroll = showTop
但是这样做会带来一个问题,就是只要滚动条发生一点点变化:
意思就是打印的太过频繁,如果此时有一些比较复杂的操作,对于页面性能来说会造成很多不必要的开销。那么我们能不能实现这样的一个功能:在第一次触发事件时,不要立马触发函数,而是进行一个n秒的延迟(n可以根据需求进行调整),如果n秒内没有再次触发事件,就执行函数,如果n秒内我又一次的触发的滚动事件,那么取消掉上一次的事件操作,重新计时,这样子我们就可以避免没有必要的消耗。
因为需要一个变量来保存时间,但是为了防止全局变量污染,我们使用闭包来解决这个问题。
function showTop() {
let scollTop = document.body.scrollTop || document.documentElement.scrollTop
console.log(scollTop);
}
function debounce(fn, delay) {
let timer = null
return function () {
if (timer) {
clearInterval(timer)
}
timer = setTimeout(fn, delay);
}
}
window.onscroll = throttle(showTop, 500)
标签:触发,面试题,节流,scollTop,防抖,timer,scrollTop,showTop 来源: https://blog.csdn.net/weixin_45460053/article/details/120297209
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。