原生JS实现防抖:

news/2025/2/7 4:44:09/

防抖:短时间内多次触发,且只执行一次

适用场景:短时间内,多次向服务器发请求,获取数据,如:搜索框、三级分类等

需要理解的知识:

1:函数的执行顺序

2:绑定一个函数,并返回一个函数,不会执行函数内部返回的函数

3:绑定一个函数调用,js加载完成,只会执行一次外部的数据

4:点击按钮时,只会执行返回的内部函数

了解以上内容后,理解正片就容易了

正片:

 代码:

注释代码:均为测试代码

注意:外部的 timer 可以定义成任何类型的数据(如:undefined、null、NaN也可以定义,timer的主要作用是充当一个容器),因为函数内部是从上往下执行。所以,清空定时器,必须写在创建定时器之前,这样就得提前把timer容器创建好。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>防抖</title>
</head>
<body><!-- <button class="add">123</button> --><input type="text" id="demo"><script>let demo = document.getElementById('demo')//获取input框demo.oninput = Fd() //创建一个构造函数function Fd(){   let timer = falseconsole.log('*'); //一创建就会执行,且只执行一次return (e)=>{ //此次的e必须要写,不然无法获取到事件对象eventif(timer){ //timer 延时器再次调用时触发,清空上一次的延时器clearTimeout(timer)}timer = setTimeout(() => {console.log(e.target.value); //每隔2秒执行一次}, 2000);}}// demo.oninput = function(){//     let timer = false//     console.log('*'); //     return (e)=>{//此处触发事件,不会执行//         if(timer){//             clearTimeout(timer) //         }//         timer = setTimeout(() => {//             console.log(e.target.value);//         }, 2000);//     }// }// let a = document.querySelector('.add')// a.onclick = b()// function b(){//    console.log('*');//    return function a(){//         console.log('123');//    }// }</script>
</body>
</html>


http://www.ppmy.cn/news/826775.html

相关文章

防抖的实现

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

Android Camera2相机预览画面放大缩小(数码变焦DigitalZoom)功能实现

一、前言 Android自定义相机开发中&#xff0c;常常会有通过手势放大或缩小相机预览画面的需求&#xff0c;即数码变焦DigitalZoom。 二、接口说明 1. 获取最大的放大倍数 float maxZoom mCameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_…

Android开发:控制镜头变焦

特别针对三星盖世相机&#xff1a;EK-GC100 EK-GC110 MainActivity.java package com.example.mytestcamera;import java.io.IOException;import android.app.Activity; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.os.Bund…

js防抖功能实现

大家好&#xff0c;今天来点有一点点难度的防抖原理实现&#xff0c;今天呢我们要实现的是一个豪华版的防抖&#xff0c;我想想奥&#xff0c;作为一个豪华版的防抖肯定不能只有防抖的功能&#xff0c;假如现在我们有一个输入框搜索的案例&#xff0c;我们使用防抖来进行约束&a…

【Camera】相机防抖

2019独角兽企业重金招聘Python工程师标准>>> 【防抖】 EIS防抖(电子防抖)和光学防抖 EIS(Electronic Image Stabilization)电子防抖主要指数码相机上采用强制提高CCD感光参数、同时加快快门并针对CCD上取得的图像进行分析,然后利用边缘图像进行补偿的防抖,电子…

JS中的防抖

防抖这里两个词可能对一些初入JavaScript的同学比较陌生,那这篇文章主要是针对这些同学们的,浅谈一下防抖 防抖: 1. "防抖"是什么 首先,先去解释一下什么叫做防抖, 在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内又被触发&#xff0c;则重新计时。纯理论是…

关于Android 点击防抖动处理

我们使用app的时候&#xff0c;经常会因为某些原因出现双击的情况&#xff0c;比如点击一个按钮会弹出一个提示框&#xff0c;但是如果我们快速的点击按钮两次&#xff0c;这个时候会出现两个提示框。 双击跟抖动看似一样&#xff0c;其实不是&#xff0c;双击是一个完整的事件…

安卓点击防抖优化手册(非代码层指导)

### 1.1.1. 什么是点击防抖&#xff1f; &emsp;&emsp;在应用日常使用过程中&#xff0c;短时间内超过一次点击某个按钮会触发多次这个按钮的后续逻辑代码运行&#xff0c;这时加入某些手段屏蔽掉除第一次以外的点击事件去重复触发逻辑的控制称为点击防抖。 ### 1.1.…