一文教你彻底学会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日

相关文章

  • JavaScript文本特效实例小结【3个示例】

    下面是对于“JavaScript文本特效实例小结【3个示例】”这篇文章的详细攻略。 JavaScript文本特效实例小结【3个示例】 1. 第一个示例 文章中第一个示例是实现一个文本逐字递增效果,代码如下: let speed = 80; // 每个字停顿的时间(ms) let text = ‘Hello World!’; // 需要展示的文本 let co…

    JavaScript 2023年5月28日
    00
  • vue element-ui实现动态面包屑导航

    一、概述 面包屑导航是指网站或应用程序主导航之外的一种辅助性导航元素。随着单页应用(SPA)的普及,动态面包屑导航也变得越来越常见。Vue Element-UI提供了很好的组件支持,可以轻松实现动态面包屑导航的功能。 二、步骤 安装Vue和Element-UI 在Vue Element-UI中使用动态面包屑导航功能,需要先安装Vue和Element-UI。可…

    JavaScript 2023年6月10日
    00
  • 微信小程序的部署方法步骤

    当您准备好为您或您的客户构建微信小程序时,下一步是部署它。以下是微信小程序的部署方法步骤的完整攻略: 1. 注册小程序帐号 首先,在 微信公众平台 上注册一个小程序帐号。按照提示填写信息并完成注册流程。 2. 开发小程序代码 您可以使用 微信官方开发工具 开始创建和构建小程序。请按照教程进行设置和创建小程序代码。 3. 添加小程序版本 在微信小程序开发者工具…

    JavaScript 2023年6月10日
    00
  • 用nodejs实现json和jsonp服务的方法

    以下是详细讲解“用nodejs实现json和jsonp服务的方法”的完整攻略。 什么是JSON和JSONP JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,易于读写、快速解析和生成,通常用于客户端与服务器之间的数据传输。 JSONP (JSON with Padding)是一种跨域通信技术,它利用了标签的跨域特性…

    JavaScript 2023年5月27日
    00
  • Javascript Date getTimezoneOffset() 方法

    JavaScript 中的 getTimezoneOffset() 方法用于获取本地时间与 UTC 时间之间的时差,以分钟为单位。在本教程中,我们将详细介绍 getTimezoneOffset() 方法的使用方法。 getTimezoneOffset() 方法的基本语法如下: date.getTimezoneOffset() 其中,date 是要获取时差的日…

    JavaScript 2023年5月11日
    00
  • js动态生成唯一id的三种方法

    那么我们就来讲解一下JS动态生成唯一ID的三种方法。 1. 使用Math.random() 使用Math.random()方法可以生成一个随机数,因为它返回0到1之间的伪随机数,所以我们可以将其与当前的时间戳相乘,生成一个不太可能重复的唯一ID。 function generateUniqueID() { let uniqueID = Math.floor(…

    JavaScript 2023年6月10日
    00
  • JS替换字符串中指定位置的字符(多种方法)

    JS替换字符串中指定位置的字符(多种方法) 在JavaScript中,我们经常需要替换字符串中的字符,特别是需要替换某个位置的字符时。下面是几种替换字符串中指定位置的字符的方法。 1. 使用字符串的substr()和replace()方法 let str = "hello world"; let index = 6; // 替换第 7 个…

    JavaScript 2023年5月28日
    00
  • JavaScript实现自动弹出窗口并自动关闭窗口的方法

    要实现自动弹出窗口并自动关闭窗口,可以使用JavaScript的定时器和窗口对象的方法。具体步骤如下: 一、弹出窗口 使用window.open()方法在浏览器中弹出一个新窗口。 window.open("http://www.example.com", "example", "width=300,heigh…

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