js实现防抖(debounce)与节流(throttle)

防抖(debounce)

一句话概括:防抖是给定一个时间周期,如果触发事件的周期小于该事件(也就是触发过快),则不会触发事件。
举个例子:我给定的时间周期是1s,如果我在触发第一次事件后1s内触发该事件,则重新开始计时,直到触发周期大于1s才会执行事件的方法。

function debounce(fn,timeout){
    let timer = null
    return function(){
        clearTimeout(timer)
        timer = setTimeout(() => {
            fn.apply(window,arguments)
        }, timeout);
    }
}

一句话概括:节流是给定一个时间周期,然后对频率大的触发进行削峰,如果触发事件的周期大于该事件(也就是触发过快),则会触发事件的周期限定在给定的周期内,如果小于则按照正常的时间触发。
举个例子:我给定的时间周期是1s,如果我在触发第一次事件后连续0.5s内触发该事件,那触发周期会变成每间隔1s执行事件。

节流(throttle)

function throttle(fn,timeout){
    let flag = true
    return function(){
        if(flag){
            setTimeout(() => {
                fn.apply(this,arguments)
                flag = true
            }, timeout);
        }
        flag = false
    }
}

其他应用场景举例

讲完了这两个技巧,下面介绍一下平时开发中常遇到的场景:

  1. 搜索框input事件,例如要支持输入实时搜索可以使用节流方案(间隔一段时间就必须查询相关内容),或者实现输入间隔大于某个值(如500ms),就当做用户输入完成,然后开始搜索,具体使用哪种方案要看业务需求。
  2. 页面resize事件,常见于需要做页面适配的时候。需要根据最终呈现的页面情况进行dom渲染(这种情形一般是使用防抖,因为只需要判断最后一次的变化情况)

第三方实现

如果自己不愿意封装,可以用第三方实现,比如lodash

原文链接:https://www.cnblogs.com/shinebay/p/17345692.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现防抖(debounce)与节流(throttle) - Python技术站

(0)
上一篇 2023年4月24日
下一篇 2023年4月24日

相关文章

  • 微信小程序实现圆心进度条

    接下来我将为大家详细讲解“微信小程序实现圆心进度条”的完整攻略。该攻略分为以下几个步骤: 步骤一:创建页面 在微信小程序开发者工具中创建一个页面,并在页面中引入canvas组件,用于绘制圆心进度条。 <!– 页面 wxml 代码 –> <canvas canvas-id="canvas1" style="w…

    JavaScript 2023年6月11日
    00
  • js字符串处理之绝妙的代码

    下面我将详细讲解“js字符串处理之绝妙的代码”这个主题,帮助你了解这个主题的内容和示例。 什么是 JavaScript 字符串处理? JavaScript 是一种具有强大字符串处理能力的编程语言。字符串作为 JavaScript 中最常见的数据类型之一,经常需要被处理和操作。JavaScript 提供了一组内置的字符串方法,用于处理和操作字符串。 常见的字符…

    JavaScript 2023年5月28日
    00
  • JavaScript中Array的filter函数详解

    JavaScript中的Array对象提供了一个filter方法,该方法可以用于在数组中过滤出符合条件的元素。本文将详细介绍该方法的使用方法。 Array的filter函数详解 语法 array.filter(function(currentValue, index, arr), thisValue) 参数 function(currentValue, in…

    JavaScript 2023年5月27日
    00
  • 关于JSON解析的实现过程解析

    关于JSON解析的实现过程解析 1. 什么是JSON解析? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,比XML更加简洁、易于阅读和理解。JSON解析是将JSON数据格式转换成程序中的对象表示的过程,它是实现Web应用的关键技术之一。 2. JSON解析过程 JSON解析通常分成两个步骤:解析和生成。 解析 解…

    JavaScript 2023年5月27日
    00
  • 纯javascript判断查询日期是否为有效日期

    针对“纯javascript判断查询日期是否为有效日期”的问题,我给出如下攻略: 1.判断规则 要判断日期是否有效,需要先确定日期的格式。在常见的日期格式中,比较常用的是以下三种: 年月日格式:如2022-07-01; 月日年格式:如07/01/2022; 日月年格式:如01.07.2022。 无论哪种日期格式,都需要满足一些规则才能算是有效的日期。下面列出…

    JavaScript 2023年5月27日
    00
  • js实现日历与定时器

    JS实现日历与定时器完整攻略 1. JS实现日历 1.1 核心思路 获取当地时间(年、月、日); 定义一个方法,将获取到的时间以日历的形式渲染到页面中; 监听页面上的事件,实现日历的下一页、上一页功能; 实现日历的跳转到具体某一天的功能。 1.2 代码实现 // 获取当前日期 function getDate() { const today = new Da…

    JavaScript 2023年5月27日
    00
  • 用Golang运行JavaScript的实现示例

    下面是 “用Golang运行JavaScript的实现示例”的完整攻略。 什么是Golang Go语言(Golang)是一种面向现代化Web应用开发的开源编程语言,由Google公司开发并于2009年11月正式发布,被描述为既具有静态语言的安全性和严谨性,又具有动态语言的高效和可读性。 Golang运行JavaScript的实现示例 Golang 好在处理高…

    JavaScript 2023年5月28日
    00
  • javascript中利用柯里化函数实现bind方法

    利用柯里化函数实现bind方法 在 JavaScript 中,bind() 是一个用于改变函数 this 上下文的方法。它返回一个新函数,新函数的 this 指向 bind() 的第一个参数,并且在调用的时候可以传入多个参数传递给原函数。这个方法在函数式编程中非常有用,因为它允许我们更容易地组合函数。 柯里化函数可以用来实现 bind() 方法,让我们来看看…

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