当前位置:网站首页>小程序的防抖节流怎么写?
小程序的防抖节流怎么写?
2022-06-28 02:59:00 【Dark_programmer】
1.概念
函数防抖(debounce)
函数防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
简单的说,当一个动作连续触发,则只执行最后一次。
如果有人进电梯(触发事件),那电梯将在10秒钟后出发(执行事件监听器),这时如果又有人进电梯了(在10秒内再次触发该事件),我们又得等10秒再出发(重新计时)
函数节流(throttle)
限制一个函数在一定时间内只能执行一次。
保证如果电梯第一个人进来后,10秒后准时运送一次,这个时间从第一个人上电梯开始计时,不等待,如果没有人,则不运行
2. 代码封装
函数防抖(debounce)
/** * * @param {*} cb 回调函数 * @param {*} delay 延时时间 */
const debounce = (cb, delay = 1000) => {
let timer = null;
return function() {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
cb.apply(this, arguments);
}, delay);
};
};
函数节流(throttle)
/** * * @param {*} cb 回调函数 * @param {*} wait 等待时间 */
const throttle = (cb, delay = 1000) => {
//距离上一次的执行时间
let lastTime = 0;
return function() {
let _this = this;
let _arguments = arguments;
let now = new Date().getTime();
//如果距离上一次执行超过了delay才能再次执行
if (now - lastTime > delay) {
cb.apply(_this, _arguments);
lastTime = now;
}
};
};
3. 使用
mine.axml
<view class="root_container">
<input placeholder="Input" onInput="inputHandle" />
<button size="default" type="primary" catchTap='clickHandle'>Button</button>
</view>
mine.js
import {
debounce, throttle } from "/utils/index.js";
// 节流使用
clickHandle: throttle(function(...args) {
console.log("throttle", args);
console.log("throttle", this);
}, 2000),
// 防抖使用
inputHandle: debounce(function(...args) {
console.log("debounce args", args);
console.log("debounce this", this);
}, 1000),
边栏推荐
- 数据库系列之MySQL和TiDB中慢日志分析
- Sublime text 3 basic configuration tutorial
- 2022 operation of simulated examination platform of special operation certificate examination question bank for safety management personnel of hazardous chemical business units
- 物体上下漂浮工具
- 基于 LNMP 搭建个人网站的填坑之旅
- Object floating tool
- mysql获取当前时间是一年的第多少天
- 力扣每日一题-第29天-1491.去掉最低工资和最高工资后的平均工资
- Win10 如何删除系统盘大文件hiberfil.sys
- WebSocket(简单体验版)
猜你喜欢

JVM一:JVM入门以及Class文件认识

可扩展系统的“9不”原则和“5个”衡量维度

Change of monitoring documents and folders of "operation and maintenance department"

matlab习题 —— 矩阵的常规运算

Go speed

Custom controls under WPF and adaption of controls in Grid

2022 electrician (elementary) recurrent training question bank and online simulation examination

Tardigrade:Trino 解决 ETL 场景的方案

R1 Quick Open Pressure Vessel Operation Special Operation Certificate Examination Library and Answers in 2022

多线程与高并发四:VarHandle与强软弱虚引用和ThreadLocal
随机推荐
Object class, and__ new__,__ init__,__ setattr__,__ dict__
多线程与高并发二:volatile和CAS详细介绍
The same is MB. Why is the gap so large?
JVM一:JVM入门以及Class文件认识
"Five layer" architecture of cloud applications and services
基于 WPF 的酷炫 GUI 窗口的简易实现
猴子都会用的圆形滑动自动吸附UI工具
Redis cluster setup [simple]
启牛商学院赠送证券账户是真的吗?开户到底安不安全呢
新手开哪家的证券账户是比较好?炒股开户安全吗
MySQL error
Li Kou daily question - day 29 -523 Count odd numbers in interval range
Dataloader parameter collate_ Use of FN
SSH框架的搭建(上)
Go 數據類型篇(四)之浮點型與複數類型
「运维有小邓」监控文件及文件夹变更
资源管理、高可用与自动化(下)
Necessary software tools in embedded software development
多线程与高并发三:AQS底层源码分析及其实现类
数据库系列之MySQL和TiDB中慢日志分析