首页 > 编程语言 >JavaScript笔记 - 防抖与节流

JavaScript笔记 - 防抖与节流

时间:2022-12-11 17:47:57浏览次数:55  
标签:触发 防抖 一次 节流 JavaScript key 请求

防抖与节流

目录

  • 在进行窗口操作或者输入框操作时,如果事件处理函数触发频率过高,会加重浏览器和服务器的负担。此时可以使用防抖和节流的方式来减少调用频率,同时又不影响实际效果。
  • 防抖与节流是一个宽泛的概念,不仅仅局限于JS,许多语言/框架都可以使用,此篇笔记以JS为例演示效果

1. 防抖

  • 定义:单位时间内,频繁触发一个事件,以最后一次触发为准

  • 实现原理:设置一个延时器(setTimeout),如果在指定时间内收到多次请求,则每次受到请求都会清除上一次请求的定时器,重新开始计时。即,在指定时间内用户无论提交多少次,只有最后一次能触发成功

  • 示例代码

    let timeID = null
    document.querySelector('input').oninput = function () {
    	//1.清除之前的定时器
    	clearTimeout(timeID)
    	//2.开启本次定时器
    	timeID = setTimeout(() => {
    		console.log(`发送ajax,搜索的内容是${this.value}`)
    	}, 500)
    }
    

2. 节流

  • 定义:单位时间内,频繁触发一个事件,最终只会触发一次

  • 实现原理:设置状态锁(key),key初始值为false。当点击/输入时,对key进行判断,如果key未上锁(false),那么开始发起请求,并且给key上锁(true)。如果你此时继续点击,对key进行判断时,发现key上锁了,则不发起请求,点击无效。当请求完成后,再次key设置为false,则可以尝试发送新一轮请求。

  • 示例代码

    //声明一个全局变量存储触发时间
    let lastTime = null
    //页面滚动事件
    window.onscroll = function () {
    	//1.每一次触发 先获取本次时间戳
    	let currentTime = Date.now()
    	//2.判断当前时间 与 上次触发时间 是否超过间隔
    	if (currentTime - lastTime >= 500) {
    		console.log(document.documentElement.scrollTop)//获取滚动距离
    		//3.存储本次的触发时间
    		lastTime = currentTime
    	}
    }
    
  • 防抖和节流的区别

    • 防抖是将多次执行变为最后一次执行,函数防抖对于连续触发的事件,只在最后执行一次
    • 节流是将多次执行变成每隔一段事件执行,函数节流一段时间内只执行一次。

标签:触发,防抖,一次,节流,JavaScript,key,请求
From: https://www.cnblogs.com/Solitary-Rhyme/p/16973982.html

相关文章

  • Javascript的预解析机制
    JS的预解析机制想要理解js的解析机制,不妨先了解两个概念:变量声明提升与函数声明提升。声明提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。变量......
  • javascript-代码随想录训练营day25
    216.组合总和Ⅲ题目链接:https://leetcode.cn/problems/combination-sum-iii/题目描述:找出所有相加之和为n的k个数的组合,且满足下列条件:只使用数字1到9每个数字......
  • JavaScript奇淫技巧:隐写术
    JavaScript奇淫技巧:隐写术本文将用JavaScript实现“图片隐写术”。什么是隐写术?将文本或其它数据写入图片的技术,称为“隐写术”。比如下面这张图中,便隐藏着秘密信息,虽然看起......
  • JavaScript:this指针
    this指针,存储的是一个内存地址,如同变量一样,指向一块内存区域;而这个内存区域,保存的就是一个对象的数据,那么这个对象是什么呢?通常来说,this指针,主要是用在方法(函数)中,用来指......
  • 深入解析 JavaScript 中 apply 方法原理
    前言大家好,我是 CoderBin,在面试当中,手撕代码的场景屡见不鲜,手写JS当中的方法更是最常见的一种,所以本文将全面的,详细解析​​apply​​方法的实现原理,并手写出自己的​​a......
  • 前端开发系列023-基础篇之JavaScript和JSON(扩展)
    title:'前端开发系列023-基础篇之JavaScript和JSON(扩展)'tags:-javaScript系列categories:[]date:2017-06-2008:20:13本文输出JSON搜索和JSON转换相关的内容......
  • 前端开发系列022-基础篇之JavaScript和JSON(进阶)
    title:'前端开发系列022-基础篇之JavaScript和JSON(进阶)'tags:-javaScript系列categories:[]date:2017-06-1908:20:13在[javaScript和JSON](http://wendingd......
  • 前端开发系列030-基础篇之JavaScript函数基本
    title:'前端开发系列030-基础篇之JavaScript函数基本'tags:-javaScript系列categories:[]date:2017-08-1122:05:13一、函数的创建和结构函数的定义:函数是Jav......
  • javascript:微信扫一扫下载android应用的引导页
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><bodystyle="padding:0px;margin:0px;"><!--background--><divsty......
  • javascript: addEventListener对事件冒泡和事件捕获的处理演示(chrome 108.0.5359.98)
    一,js代码<html><head><metacharset="utf-8"/><title>测试</title></head><bodystyle="padding:0px;margin:0px;"><buttonid="btn">点击</button>......