微信小程序全局封装防抖节流函数

什么是防抖节流?

  • 防抖: 简单来说就是指触发事件后在 n 秒内函数只能执行一次(输入框搜索自动补全事件、频繁点赞和取消点赞、提交事件等等)
  • 节流: 简单来说就是指连续触发事件但是在 n 秒中只执行一次函数(发送验证码、表单验证、鼠标移动事件等等)

小程序中使用

封装文件 throttle.js(路径:/utils/throttle.js)

javascript 复制代码
/* 节流函数封装 */
function throttle(fn, gapTime) {
    if (gapTime == null || gapTime == undefined) {
        gapTime = 1500
    }
    let _lastTime = null
    // 返回新的函数
    return function () {
        let _nowTime = +new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn.apply(this, arguments) //将this和参数传给原函数
            _lastTime = _nowTime
        }
    }
}
/* 防抖函数封装 */
function debounce(fn, interval) {
    let timer;
    let delay = interval || 1000; // 间隔的时间,如果interval不传,则默认1秒
    return function () {
        let that = this;
        let args = arguments; // 保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(function () {
            fn.apply(that, args); // 用apply指向调用debounce的对象,相当于this.fn(args);
        }, delay);
    };
}
// 将写好的方法抛出
module.exports = {
    throttle,
    debounce
}

使用的文件 home.wxml(路径:pages/home/home.wxml)

javascript 复制代码
<button bindtap="formSubmit">点击触发事件</button>

使用的文件 home.js(路径:pages/home/home.js)

- 防抖函数:

javascript 复制代码
// 引入封装文件
var util = require('../../utils/throttle');
Page({
    data: {},
     // 调用防抖函数(触发事件后在1秒内函数只能执行一次)
     formSubmit: util.debounce(function () {
         console.log("'防抖函数'")
     }, 1000),
})

防抖函数实现效果

可以看到我们从一开始就疯狂点击,但是都没有触发打印,只有我们停下来后,才会触发最后一次点击事件。

- 节流函数:

javascript 复制代码
// 引入封装文件
var util = require('../../utils/throttle');
Page({
    data: {},
    // 调用节流函数(首次点击后触发打印,3秒内点击按钮都不会触发,3秒后再次点击触发)
    formSubmit: util.throttle(function (e) {
        console.log('节流函数');
    }, 3000),
})

节流函数实现效果

可以看到在我们第一次点击事件后,触发了打印,但当我们在3秒内又点击了几次都没有触发打印,3秒后再次点击才会触发。

相关推荐
小蒜学长21 小时前
基于微信小程序的遇见咖啡店点餐系统设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序·咖啡店点餐系统
今日热点21 小时前
小程序主体变更公证线上办理教程|2026 最新材料规范与审核避坑
小程序
Ai-_Man21 小时前
从聊天框到正式文档:AI导出鸭瞄准AI大模型应用的“最后一公里”
开发语言·前端·javascript·人工智能·小程序
省钱兄--zs1 天前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
Ai-_Man1 天前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
光影少年2 天前
Taro 是如何解析入口配置 app.config.ts 和页面配置的?
微信小程序·小程序·typescript·reactjs·百度小程序·taro
用户788477316342 天前
门店核销闭环:小程序扫码 + .NET 幂等接口 + WPF 看板,一天能跑通
微信小程序·c#
DS小龙哥2 天前
从呼吸心率到离床报警:60G雷达睡眠仪全栈开发实录(硬件+MQTT+小程序)DIY一台全功能睡眠监护仪
stm32·单片机·嵌入式硬件·物联网·小程序·智能家居
扶风ff2 天前
练题簿在线免费刷题:刷题、背题、错题复习,一个小程序安排日常备考
学习·小程序
扶风ff2 天前
练题簿在线免费刷题:共享题库、学习任务、在线考试,岗位培训更方便
学习·小程序