1、用时间戳判断是否已到回调执行时间,记录上次执行时间戳,然后每次触发事件时执行回调,回调判断当前时间戳距离上次执行时间戳的时间间隔是否为*s。
如果是,则执行,并更新上次执行时间戳,如此循环。
varthrottle=function(delay,action){ varlast=0; returnfunction(){ varcurr=newDate(); if(curr-last>delay){ action.apply(this,arguments); last=curr; } } }
2、使用定时器。
比如,当scroll事件刚触发时,打印一个hello world ,然后设置一个1000ms的定时器,此后每次触发scroll事件,触发回调,如果已经存在定时器,则回调不执行方法,知道定时器出发,handler被清除,然后重新设置定时器。
varthrottle=function(delay,action){ vartimeout; varlater=function(){ timeout=setTimeout(function(){ clearTimeout(timeout); //解除引用 timeout=null; },delay); }; later(); if(!timeout){ action.apply(this,arguments); later(); } }
以上就是javascript函数节流实现的两种方式,希望对大家有所帮助。更多Javascript学习指路:Javascript
原文来自:https://www.py.cn© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容