• 技术文章 >web前端 >js教程

    JavaScript中防抖节流的详细介绍(代码示例)

    不言不言2019-01-14 09:44:19转载1083
    本篇文章给大家带来的内容是关于JavaScript中防抖节流的详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段。

    函数节流(throttle)与 函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。

    函数节流(throttle)

    函数节流是指一定时间内执行的操作只执行一次,也就是说即预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期,一个比较形象的例子是如果将水龙头拧紧直到水是以水滴的形式流出,那你会发现每隔一段时间,就会有一滴水流出。

    function debounce(fn, wait) {   
        var timeout = null;   
        return function() {       
            if(timeout !== null) clearTimeout(timeout);       
            timeout = setTimeout(fn, wait);   
        }
    }
    // 处理函数
    function handle() {   
        console.log(Math.random());
    }
    // 滚动事件
    window.addEventListener('scroll', debounce(handle, 1000));

    函数防抖(debounce)

    函数防抖是指在一定时间内,在动作被连续频繁触发的情况下,动作只会被执行一次,也就是说当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间,所以短时间内的连续动作永远只会触发一次,比如说用手指一直按住一个弹簧,它将不会弹起直到你松手为止。

    时间戳

    var throttle = function(func, delay) {           
        var prev = Date.now();           
        return function() {               
            var context = this;               
            var args = arguments;               
            var now = Date.now();               
            if (now - prev >= delay) {                   
                func.apply(context, args);                   
                prev = Date.now();               
            }           
        }       
    }       
    function handle() {           
        console.log(Math.random());       
    }       
    window.addEventListener('scroll', throttle(handle, 1000));

    定时器

    var throttle = function(func, delay) {
        var timer = null;
        return function() {
            var context = this;
            var args = arguments;
            if (!timer) {
                timer = setTimeout(function() {
                    func.apply(context, args);
                    timer = null;
                }, delay);
            }
        }
    }
    function handle() {
        console.log(Math.random());
    }
    window.addEventListener('scroll', throttle(handle, 1000));

    以上就是JavaScript中防抖节流的详细介绍(代码示例)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:javascript
    上一篇:前端浏览器渲染的步骤介绍 下一篇:axios异步请求数据的使用(代码示例)
    大前端线上培训班

    相关文章推荐

    • 详解JavaScript中的自定义事件编写_基础知识• Bootstrap Fileinput文件上传组件用法详解_javascript技巧• BootStrap文件上传样式超好看【持续更新】_javascript技巧• JavaScript 函数的执行过程_javascript技巧• JAVASCRIPT IE 与 FF 中兼容写法记录_经验交流• javascript 获取特定的 CSS属性值_经验交流• 详解javascript函数的节流与防抖• JS函数节流防抖实例详解• javascript函数的节流throttle与防抖debounce详解• JS数组扁平化防抖与节流对象拷贝• JS简单实现防抖 - debounce和节流 - throttle• javascript函数节流和防抖的应用场景介绍• JavaScript防抖和节流的应用以及实现方法介绍(代码示例)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网