• 防抖与节流


    防抖节流

    防抖和节流是对应的

    防抖是规定时间内触发就一直延迟,直到规定时间内不触发了就执行最后一次事件;

    节流是执行第一次,在规定时间内不会再次触发,过了规定时间就会再次触发的。

    防抖代码:

     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));

     

    节流代码:

    时间戳方案 

      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));

     时间戳+定时器

    var throttle = function(func, delay) {

         var timer = null;

         var startTime = Date.now();

         return function() {

                 var curTime = Date.now();

                 var remaining = delay - (curTime - startTime);

                 var context = this;

                 var args = arguments;

                 clearTimeout(timer);

                  if (remaining <= 0) {

                        func.apply(context, args);

                        startTime = Date.now();

                  } else {

                        timer = setTimeout(func, remaining);

                  }

          }

    }

    function handle() {

          console.log(Math.random());

    }

     window.addEventListener('scroll', throttle(handle, 1000));

  • 相关阅读:
    通过修改manifest文件来解决Vista/Win7/Win8/win10下应用程序兼容性问题
    windows下django开发环境配置
    Django网站实例效果
    手动下载Linux安装包perf
    【Nginx】负载配置
    【VIM】常用命令
    【CentOS7】SCP服务器间传文件
    【CentOS7】目录统计du命令
    【CentOS7】安装GraphicsMagick
    【Nginx】限流配置
  • 原文地址:https://www.cnblogs.com/wyongz/p/11032401.html
Copyright © 2020-2023  润新知