一文教你彻底学会JavaScript手写防抖节流

一文教你彻底学会JavaScript手写防抖节流

什么是防抖和节流

在介绍手写防抖节流之前,先来了解一下防抖和节流的概念:

  • 防抖:指在短时间内多次触发同一个事件,只执行最后一次,或者只在开始时执行一次。
  • 节流:指连续触发事件但是在 n 秒中只执行一次函数。即在某个时间段内,无论触发多少次事件,都只执行一次函数。

防抖和节流可以用来解决频繁触发的问题,避免资源的浪费和性能的下降。在实际开发中经常用来处理滚动、输入等频繁触发的事件。

手写防抖

实现防抖函数的常见方法是利用 setTimeout 设置延迟执行,若延迟期间该函数再次被触发,则清除之前的延迟定时器再重新延迟,直到延迟结束执行函数。

手写防抖函数的代码示例:

function debounce(fn, delay) {
  let timer = null;

  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, arguments);
    }, delay);
  };
}

该函数接收两个参数:

  • fn,要执行的函数;
  • delay,延迟时间间隔。

该函数返回一个新的函数,执行它相当于执行 fn 函数,但执行时已经加了防抖的限制。

手写节流

实现节流函数的常见方法是用时间戳 last 记录上一次的执行时间,每次触发时判断距离上一次执行的时间是否大于函数执行的间隔时间 wait,若大于则执行函数。

手写节流函数的代码示例:

function throttle(fn, wait) {
  let last = 0;

  return function() {
    const now = Date.now();

    if (now - last > wait) {
      fn.apply(this, arguments);
      last = now;
    }
  };
}

该函数接收两个参数:

  • fn,要执行的函数;
  • wait,执行间隔时间。

该函数返回一个新的函数,执行它相当于执行 fn 函数,但执行时已经加了节流的限制。

结语

防抖和节流是 JavaScript 中非常实用的两个功能,掌握它们能够帮助我们更好地处理一些特殊的事件,避免资源的浪费和性能的下降。这里给出了手写防抖节流的代码示例, 真实项目中可以根据实际需要进行调整。

示例1: 手写防抖实现表单输入验证

const input = document.querySelector('#input');
const error = document.querySelector('#error');

// 实现表单输入防抖验证(间隔500ms)
const validateInput = debounce(function(e) {
  const value = e.target.value;
  if (value.length < 6) {
    error.style.display = 'block';
  } else {
    error.style.display = 'none';
  }
}, 500);

input.addEventListener('input', validateInput);

示例2: 手写节流实现下拉刷新

function onScroll() {
  console.log('滚动事件');
}

// 实现下拉刷新节流(间隔500ms)
const onThrottleScroll = throttle(onScroll, 500);

window.addEventListener('scroll', onThrottleScroll);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文教你彻底学会JavaScript手写防抖节流 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 5个最佳的Javascript日期处理类库分享

    以下是关于“5个最佳的Javascript日期处理类库分享”的详细攻略。 1. moment.js Moment.js是最流行的JavaScript日期库之一,提供了丰富的日期和时间功能。它有强大的解析和格式化能力,可以将日期和时间的字符串转换为具体的时间对象。此外,它还提供了一些处理日期的有用方法,例如计算时间差,生成时间序列等。 以下是一个使用Momen…

    JavaScript 2023年5月27日
    00
  • JS 创建对象(常见的几种方法)

    下面是关于JS创建对象的几种常见方法的详细攻略。 概述 在之前,我们可以通过使用对象字面量的方式来创建 JavaScript 中的对象,但是如果我们需要创建多个类似的对象,这将非常麻烦。因此,在 JavaScript 中我们可以使用不同的方法来创建对象,这些方法包括:构造函数模式、工厂模式、原型模式、组合模式和 ES6 中的 class 语法。 构造函数模式…

    JavaScript 2023年5月27日
    00
  • javaScript操作字符串的一些常用方法

    下面我来为您详细讲解“JavaScript操作字符串的一些常用方法”的完整攻略。 目录 字符串的创建与基本操作 常用操作方法 2.1 字符串查找方法 2.2 字符串替换方法 2.3 字符串切割方法 2.4 字符串转化方法 2.5 字符串大小写转换方法 2.6 字符串的比较方法 1. 字符串的创建与基本操作 在JavaScript中,可以使用单引号或双引号来创…

    JavaScript 2023年5月18日
    00
  • js中判断变量类型函数typeof的用法总结

    标题:JS中判断变量类型函数typeof的用法总结 1. typeof函数的介绍 typeof是JavaScript中的一个关键字,用于判断一个变量的类型。它返回一个字符串,表示变量的数据类型。需要注意的是,typeof运算符不是函数,括号可以省略。 普通变量的类型判断: let a = 1; console.log(typeof a); // number…

    JavaScript 2023年5月27日
    00
  • BootstrapTable与KnockoutJS相结合实现增删改查功能【二】

    下面是关于 BootstrapTable 与 KnockoutJS 相结合实现增删改查功能的攻略,包含以下几个部分: 确认基本配置 初始化 BootstarpTable 和 KnockoutJS 实现增删改查功能 1. 确认基本配置 在开始之前,我们需要确认以下几点: 页面中需要引入 Bootstrap 和 jQuery 库。 在页面中引入 Knockout…

    JavaScript 2023年6月10日
    00
  • JavaScript两种计时器的实例讲解

    下面是关于“JavaScript两种计时器的实例讲解”的完整攻略。 什么是计时器 计时器是一种常见的Web开发工具,可以在特定的时间间隔内执行某些代码或者动作。JavaScript提供了两种计时器:setInterval()和setTimeout()。 setInterval()和setTimeout()这两个函数都接受两个参数:一个是要执行的函数,另一个是…

    JavaScript 2023年5月27日
    00
  • 通过JS 获取Mouse Position(鼠标坐标)的代码

    获取鼠标坐标是JavaScript中的常见需求之一,可以通过鼠标事件对象获取鼠标相对于页面的坐标位置。 以下是获取鼠标位置的代码: document.addEventListener(‘mousemove’, (event) => { const mouseX = event.clientX; const mouseY = event.clientY;…

    JavaScript 2023年6月10日
    00
  • JS计算输出100元钱买100只鸡问题的解决方法

    关于“JS计算输出100元钱买100只鸡问题的解决方法”的完整攻略,下面是我的详细讲解: 问题描述 问题描述如下:假设农场里只有鸡和兔子,用 100 元钱买了 100 只鸡,鸡的价格是5元一只,兔子的价格是3元一只,请问鸡和兔子各有多少只? 解决方法 这是一道数学问题,我们可以用代数方程来解决。设鸡的数量为 x,兔子的数量为 y,则有以下两个式子: x + …

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部