如何在JavaScript里防止事件函数的高频触发和调用

 我来答
cainiaokan
2017-05-12 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:612万
展开全部

throttle节流阀技术可以防止事件函数(例如滚轮滚动)的回调函数被频繁调用。

节流阀函数的实现原理是:

节流函数每次执行时都会检查上次执行的时间,通过指定wait参数,来保证只有距离上次执行超过一定时间,才会真正执行内部包裹的回调函数。由此来避免一种重量级的函数(如重绘或者dom操作)被频繁调用而导致产生性能问题。

以underscore.js的实现为例

var scroller = document.getElementById('scroller_div');
// 此时console.log最多每300毫秒打印一次,不管onscroll事件触发得多么频繁,都不会超过这个频率。
scroller.onscroll = _.throttle(function (){
    console.log(scroller.scrollTop);
}, 300);
abccccaf
2017-05-12 · TA获得超过845个赞
知道小有建树答主
回答量:912
采纳率:86%
帮助的人:262万
展开全部
加时间限定啊,每次调用时都判断一下调用时间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jklkofjklkof
2017-05-12 · TA获得超过316个赞
知道答主
回答量:62
采纳率:0%
帮助的人:58.7万
展开全部
收一个思路。或许还有其他方法。
首先你在作用域里设置一个开关变量。(例如:window.canuseswitch=false;);
当你触发函数时候先判断此值是否是允许的,如果是补允许的直接关闭
如果是允许的将开关封闭
最后添加体格定时器规定时间重新打开开关
如果污染window作用域在html元素上设置自定义属性也可以。
if(!window.canuseswitch){
return false
}else{
//你要执行的绑定的行为;
window.canuseswitch=false;
window.setTimeout(function(){window.canuseswitch=true},1000)

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式