Javascript防抖

news/2025/2/7 2:54:24/

防抖(前端)

前言:
在前端开发中有一部分的用户行为会频繁的出发事件执行,而对于DOM操作、资源加载等耗费性能的处理,很可能导致界面卡顿,甚至浏览器的崩溃。函数防抖(debounce)就是为了解决类似需求应用而生的。(写给新手,最终代码在最下方,请一步一步看)

解释:
函数防抖就是在函数需要频繁出发情况时,只有足够空闲的时间,才执行一次,好像公交司机等人都上车后才出站一样。

弄清楚什么是防抖?

  1. 比如说我们现在要实现一个需求:利用input框实现一个实时搜索,我们怎么做?废话不多说,我们一步一步来。

在这里插入图片描述
在这里插入图片描述

输入值时,每按一个键,控制台就会输出当前input框里面的值。如果要是简单的获取值,那这就可以了,但是在我们实际开发中,不仅仅是获取值,比如上述提到的,实时搜索,要拿当前值去调后端接口,如果不进行防抖处理那么我们每输入一个值就会去调一次接口,不停发送请求,造成资源浪费。那么下一步我们想办法让它输入完毕之后再去发送请求,这里我们使用setTimeout来处理。

在这里插入图片描述
在这里插入图片描述

这里我们延迟1秒来输出input里的值。是不是就达到了我们的预期?但他并不完美,我们再进行处理。
在这里插入图片描述

我们利用apply方法修改**_ajax**函数this指向,同时将oninput事件函数的实际参数列表数组作为第二个参数传递过去,这时候我们既可以拿到当前函数的事件对象,也可以进行防抖处理。但是这仍不是最终我们想要的结果,在实际开发中,我们不仅仅只有ajax请求操作,所以我们下一步将它封装成一个更灵活的防抖方法。

在这里插入图片描述

这个时候我们就可以来更换执行函数了和延迟时间了。

以下是代码:

// 首先获取DOMvar oInput = document.getElementById('debounce')// 假设这是一个Ajax请求function _ajax(e) {// 我们这里打印当前input的value值; e为事件对象console.log(e, this.value)}/**handler: 执行函数delay:延迟时间*/function debounce(handler, delay) {// 声明一个变量来存放定时器let _timer = nullreturn function () {var _self = this// 执行前,先清除定时器clearTimeout(_timer)// arguments是一个函数的实际参数列表var argu = arguments_timer = setTimeout(function () {handler.apply(_self, argu)}, delay)}}// 我们给input框绑定一个input事件oInput.oninput = debounce(_ajax, 500)

重要提示:这只是个例子,一定要自己手敲一遍,印象深刻。毕竟我们都是有梦想的程序员


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

相关文章

Android 按键防止过快点击(防抖),在ButterKnife中的简单解决方案。

其实自己也在网上找了一些防抖的方案,比如RxBinding啊,NoDoubleClickListener啊,原始解决方案啊等等,不过那都不是我想要的。 因为项目中使用了ButterKnife绑定控件和为控件注册点击事件。所以上面搜到的那些方案都不太好使&…

Android Camera开发系列:设置对焦模式模式

你对android camera的对焦模式熟悉吗? 知道什么场景下该设置哪种对焦模式吗? 本文针对下面2点展开介绍,和大家一起学习~ 一、有哪几种对焦模式? 二、如何使用各种对焦模式?一、有哪几种对焦模式? 1&…

Android 实现防抖动(防快速点击)的最优雅做法

前言: 对于很多安卓开发者来说,防快速点击的实现,并不是一件难事。难的是,如何优雅的实现。现在,主流的做法,有自己在onClick方法的顶部加时间判断。也有通过,第三方注解框架去解决。但是&…

原生JS实现防抖:

防抖:短时间内多次触发,且只执行一次 适用场景:短时间内,多次向服务器发请求,获取数据,如:搜索框、三级分类等 需要理解的知识: 1:函数的执行顺序 2:绑定一…

防抖的实现

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

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

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

Android开发:控制镜头变焦

特别针对三星盖世相机: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防抖功能实现

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