码迷,mamicode.com
首页 > 其他好文 > 详细

简洁高效,让你认清 防抖和节流;

时间:2020-04-15 11:05:59      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:set   false   间隔   log   art   lis   cal   是的   ==   

 /*
        *  fn -- 用户传入函数
        *  timer -- 用户传入间隔时间
        *  debounce_防抖作用:防止用户反复点击,比如提交表单,浏览器滚动监听等,当用户停止点击时候,间隔时间大于timer,则执行传入函数;
        *  throttle_节流作用:监听事件在timer规定时间内只执行一次,达到节流作用;
        */ 
        function debounce_(fn,timer){
            return function(){
                clearTimeout(fn.id);
                var that = this;
                fn.id = setTimeout(function(){
                    fn.constructor == Function && fn.call(that);  //这样可以获取到点击事件源, 
                    // fn()     //这样也可以运行,
                },timer);
            }
        };
        function throttle_(fn,timer){
            var initTimer = new Date();            var first = true;   //因为第一次判定时候当前时间和初始时间也许相等,差值也许会小于我们给定的timer,程序不会执行,所以加上这个好些;
            return function(){  //采用闭包
            var nowTimer = new Date();   
                if( nowTimer - initTimer  >= timer || first){
                    fn.constructor == Function && fn.call(this);  //判断fn是否为函数;是的话就执行 fn.call(this);
                    initTimer = new Date();
                    first = false;
                }
            }
        }
        function test(){
            console.log(‘test‘);
        }
        document.querySelector(‘button‘).addEventListener(‘click‘,throttle_(test,2000));  //节流
        // document.querySelector(‘button‘).addEventListener(‘click‘,debounce_(test,300));  //防抖

简洁高效,让你认清 防抖和节流;

标签:set   false   间隔   log   art   lis   cal   是的   ==   

原文地址:https://www.cnblogs.com/lkkk/p/12703560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!