博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防抖和节流
阅读量:6214 次
发布时间:2019-06-21

本文共 1142 字,大约阅读时间需要 3 分钟。

hot3.png

实际工作中,我们经常性的会通过监听某些事件完成对应的需求,比如:

  1. 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮
  2. 通过监听 resize 事件,对某些自适应页面调整DOM的渲染(通过CSS实现的自适应不再此范围内)
  3. 通过监听 keyup 事件,监听文字输入并调用接口进行模糊匹配

函数防抖:

定义:多次触发事件后,事件处理函数只执行一次,并且是在触发操作结束时执行。

原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。

var timer = null;

function debounce(cb, delay = 200) {

var _this = this;

return function () {

if (timer) {

clearTimeout(timer);

}

timer = setTimeout(function () {

cb.call(_this);

},

delay)

}

}

函数节流:

定义:触发函数事件后,短时间间隔内无法连续调用,只有上一次函数执行后,过了规定的时间间隔,才能进行下一次的函数调用。

原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。

Function.prototype.throttling = function (cb, delay) {

var start, timer, end;

var _this = this;

return function loop() {

end = Date.now();

if (!start) {

start = end;

}

if (timer) {

clearTimeout(timer);

}

if (end - start > delay) {

cb.call(_this);

start = end;

} else {

timer = setTimeout(function () {

loop.call(_this);

}, 50)

}

 

}

}

测试滚动事件

window.onscroll = Function.prototype.throttling(function () {

var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

console.log('滚动距离' + ':' + scrollTop);

}, 1000);

转载于:https://my.oschina.net/u/3878260/blog/1826133

你可能感兴趣的文章
Vim脚本 - 竖线'|' 和反斜线'\'
查看>>
netty框架的学习笔记 + 一个netty实现websocket通信案例
查看>>
磁盘超过2T无法用fdisk分区的问题
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
RMQ 问题及解决算法
查看>>
setTimeOut(),和setInterVal()调用函数加不加括号!!!
查看>>
c/c++中保留两位有效数字
查看>>
urlparse获取url后面的参数
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
notepad++正则表达式例子
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
MySQL性能优化
查看>>
由String类的Split方法所遇到的两个问题
查看>>
phonegap入门–1 Android 开发环境搭建
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
js 上一步 下一步 操作
查看>>