美文网首页
防抖与节流

防抖与节流

作者: 小旎子_8327 | 来源:发表于2019-04-22 23:04 被阅读0次
    原因

    在前端页面中,用户经常会持续不断地触发事件,例如scroll、resize、输入框内容匹配等,如果事件触发无限制,将会增加浏览器负担,影响用户体验。因此,我们可以通过防抖或节流的方式降低事件处理函数调用的频率。

    防抖

    原理:

    当用户触发事件,浏览器会等待一定时间,再调用事件处理函数。如果在这个期间内用户又触发事件,则浏览器又重新等待一段时间。

    应用场景:

    输入框根据用户输入提示文本
    用户注册时候的手机号验证和邮箱验证

    函数实现:
       function debounce(func, time){
                let timer,
                return function(){
                   var self = this;
                   var argus = arguments;
                   if(timer) { clearTimeout(timer); }                                                               
                   timer = setTimeout(()=>func.apply(self, argus), time); 
                  
       }
    

    节流

    原理:

    当上一次事件处理函数执行完之后过了规定的时间间隔,才能进行下一次的事件处理函数调用

    应用场景:

    用户滚动浏览器页面

    函数实现:

    时间戳方式----第一次触发会立即执行:

       function throttle(func, time){
                let pre = Date.now(),
                return function(){
                   var self = this;
                   var args = arguments;
                   let now = Date.now();
                   if(now-pre>=time) { 
                        func.apply(self, args);
                        pre = Date.now();
                   }
       }
    

    定时器方式----第一次触发等待time秒后执行:

       function throttle(func, time){
                let timer,
                return function(){
                   var self = this;
                   var args = arguments;
                   if(!timer) { 
                       timer = setTimeout(()=>{
                            func.apply(self, args);
                            timer = null;
                        }, time); 
                   }
       }

    相关文章

      网友评论

          本文标题:防抖与节流

          本文链接:https://www.haomeiwen.com/subject/imeugqtx.html