如何在JavaScript里防止事件函数的高频触发和调用
3个回答
展开全部
throttle节流阀技术可以防止事件函数(例如滚轮滚动)的回调函数被频繁调用。
节流阀函数的实现原理是:
节流函数每次执行时都会检查上次执行的时间,通过指定wait参数,来保证只有距离上次执行超过一定时间,才会真正执行内部包裹的回调函数。由此来避免一种重量级的函数(如重绘或者dom操作)被频繁调用而导致产生性能问题。
以underscore.js的实现为例
var scroller = document.getElementById('scroller_div');
// 此时console.log最多每300毫秒打印一次,不管onscroll事件触发得多么频繁,都不会超过这个频率。
scroller.onscroll = _.throttle(function (){
console.log(scroller.scrollTop);
}, 300);
展开全部
加时间限定啊,每次调用时都判断一下调用时间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
收一个思路。或许还有其他方法。
首先你在作用域里设置一个开关变量。(例如:window.canuseswitch=false;);
当你触发函数时候先判断此值是否是允许的,如果是补允许的直接关闭
如果是允许的将开关封闭
最后添加体格定时器规定时间重新打开开关
如果污染window作用域在html元素上设置自定义属性也可以。
if(!window.canuseswitch){
return false
}else{
//你要执行的绑定的行为;
window.canuseswitch=false;
window.setTimeout(function(){window.canuseswitch=true},1000)
}
首先你在作用域里设置一个开关变量。(例如:window.canuseswitch=false;);
当你触发函数时候先判断此值是否是允许的,如果是补允许的直接关闭
如果是允许的将开关封闭
最后添加体格定时器规定时间重新打开开关
如果污染window作用域在html元素上设置自定义属性也可以。
if(!window.canuseswitch){
return false
}else{
//你要执行的绑定的行为;
window.canuseswitch=false;
window.setTimeout(function(){window.canuseswitch=true},1000)
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询