提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、节流是什么?
示例:高铁卫生间是否被占用,由红绿灯控制,红灯表示被占用,绿灯表示可使用。 假设每个人上卫生间都需要花费5分钟,则五分钟之内,被占用的卫生间无法被其他人使用。 上一个人使用完毕后,需要将红灯重置为绿灯,表示下一个人可以使用卫生间。 下一个人在上卫生间之前,需要先判断控制灯是否为绿色,来知晓能否上卫生间。
节流阀为空,表示可以执行下次操作;不为空,表示不能执行下次操作。 当前操作执行完,必须将节流阀重置为空,表示可以执行下次操作了。 每次执行操作前,必须先判断节流阀是否为空。
应用场景
(1) 鼠标连续不断地触发某事件(如点击),只在单位时间内只触发一次;
(2) 懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费 CPU 资源;
二、使用步骤
如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性地执行一部分事件!
1.定义节流阀
代码如下(示例):
// 步骤1. 定义节流阀
var timer = null //false
2.绑定 mousemove 事件
// 2. 绑定 mousemove 事件
$(document).on('mousemove', function (e) {
// 步骤3:判断节流阀是否为空,如果不为空,则证明距离上次执行间隔不足16毫秒
if (timer) {
return
}
// 3. 设置图片的位置
// 步骤2:开启延时器 2.当设置了鼠标跟随效果后,清空 timer 节流阀,方便下次开启延时器
timer = setTimeout(function () {
$(angel).css('top', e.pageY + 'px').css('left', e.pageX + 'px')
console.log('ok')
timer = null
}, 16)
})
3. 判断节流阀是否为空,如果不为空,说明距离上一次执行时间还没有设定的时间。则返回。
if (timer) {
return
}
总结
提示:这里对文章进行总结:
节流:鼠标连续不断地触发某事件(如点击),只在单位时间内只触发一次;可以降低计算的频率,而不必去浪费 CPU 资源;
当你鼠标疯狂点击的时候,始终执行的是第一次的点击。