js防抖与节流

函数防抖
函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。

函数节流
函数节流(throttle):当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

主要用于频繁操作dom产生的事件,如:滚动事件,拖拽事件,窗口缩放等等
防抖:

function debounce(fn, delay) {
  let timer = null;
  return function() {
    // 通过 ‘this’ 和 ‘arguments’ 获取函数的作用域和变量
    let context = this;
    let args = arguments;
    // 清理掉正在执行的函数,并重新执行
    clearTimeout(timer);
    timer = setTimeout(function() {
      fn.apply(context, args);
    }, delay);
  }
}

function scroll() {
  console.log(1111)
}
document.body.addEventListener('scroll', debounce(scroll, 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 scroll() {
            console.log(111);
        }
        window.addEventListener('scroll', throttle(scroll, 1000));
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前端开发中会遇到一些频繁的事件触发,例如input,keyup,keydown,scroll,resize,mo...
    tiancai啊呆阅读 854评论 0 7
  • 防抖: 多次触发只执行一次, 并在函数触发结束的时候执行。 防抖第一版,无法复用 第二版 3.第三版修改函数调用时...
    rub1cky阅读 318评论 0 0
  • 在工作中,我们可能碰到这样的问题 (1)用户在搜索的时候,在不停敲字,如果每敲一个字我们就要调一次接口,接口调用太...
    webj阅读 533评论 0 5
  • 前言 最近和前端的小伙伴们,在讨论面试题的时候。谈到了函数防抖和函数节流的应用场景和原理。于是,想深入研究一下两者...
    youthcity阅读 23,632评论 5 78
  • 米兰退出了L.L魔法社团,她觉得心情很沉重。为什么没有人相信她呢? 这几天,米兰面如灰土,极力的挽回一切。可每次都...
    Melany阅读 185评论 0 0