防抖&节流

简介: 防抖&节流

防抖

在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行

防抖实现

注意以下几点

  1. this 的指向
  2. 是否可以立即执行
  3. 函数的参数问题
  4. 函数具有返回值的问题
  5. 添加取消功能
function debounce(func, wait, immediate) {
  var timeout, result;

  var debounced = function () {
    var context = this;
    var args = arguments;

    if (timeout) clearTimeout(timeout);
    if (immediate) {
      // 如果已经执行过,不再执行
      var callNow = !timeout;
      timeout = setTimeout(function () {
        timeout = null;
      }, wait);
      if (callNow) result = func.apply(context, args);
    } else {
      timeout = setTimeout(function () {
        func.apply(context, args);
      }, wait);
    }
    return result;
  };

  debounced.cancel = function () {
    clearTimeout(timeout);
    timeout = null;
  };

  return debounced;
}

节流

持续触发事件,每隔一段时间,只执行一次事件。

节流实现

// 第四版
function throttle(func, wait, options) {
  var timeout, context, args, result;
  var previous = 0;
  if (!options) options = {};

  var later = function () {
    previous = options.leading === false ? 0 : new Date().getTime();
    timeout = null;
    func.apply(context, args);
    if (!timeout) context = args = null;
  };

  var throttled = function () {
    var now = new Date().getTime();
    if (!previous && options.leading === false) previous = now;
    var remaining = wait - (now - previous);
    context = this;
    args = arguments;
    if (remaining <= 0 || remaining > wait) {
      if (timeout) {
        clearTimeout(timeout);
        timeout = null;
      }
      previous = now;
      func.apply(context, args);
      if (!timeout) context = args = null;
    } else if (!timeout && options.trailing !== false) {
      timeout = setTimeout(later, remaining);
    }
  };
  throttled.cancel = function () {
  clearTimeout(timeout);
  previous = 0;
  timeout = null;
};
  return throttled;
}
目录
相关文章
|
数据安全/隐私保护
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
742 0
|
机器学习/深度学习 人工智能 算法
《AI芯片:如何让硬件与AI计算需求完美契合》
在人工智能快速发展的今天,AI芯片成为推动该领域前行的关键力量。AI芯片如同“超级大脑”,支撑着从智能语音助手到自动驾驶汽车等各种复杂应用。它通过GPU、ASIC和FPGA等架构,优化矩阵运算、内存管理和数据传输,满足大规模数据处理需求。尽管面临通用性和成本挑战,未来AI芯片有望在异构计算、新兴技术和降低成本方面取得突破,为AI发展注入强大动力。
797 17
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
数据采集 机器学习/深度学习 数据挖掘
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
|
消息中间件 Java Kafka
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
589 0
|
安全 Linux Python
|
存储 安全 算法
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
854 1
springboot aop方式打印请求参数与结果(支持POST请求)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81806044 @A...
8780 0