防抖

在小程序上使用之前得先介绍一下防抖。无非就是将一个频繁的操作延迟触发并且同时减少触发次数。
本质就是利用闭包保存定时器数据,并且在延迟时间内频繁触发会清除上一次的定时器操作。最后能触发的只能是触发事件之后的延迟时间内不再进行触发事件,则该在延迟时间结束后事件执行。(假设定时器设置的延迟时间为 500ms,第一次触发事件,第二次触发事件和第一次的时间间隔小于500ms,则清除第一次事件的触发,第三次触发事件和第二次的时间间隔若小于 500ms,则第二次不执行,… 直到第N次触发事件后的 500ms 不进行事件的触发,则第N次事件执行)

/*** 防抖函数* @param {Function} fn 需要进行防抖的函数引用* @param {Number} wait 延迟时间*/
function debounce(fn, wait) {let timer;  // 关键return function () {  // 最终交由输入框执行的是这个返回函数,而不是debounce(fn,wait),关键clearTimeout(timer); // 清除上一次的定时器timer = setTimeout(() => {   // 设置新的定时器fn.apply(this, arguments)  // 执行需要执行的防抖函数(例如输入事件)}, wait); // 设置延迟时间}
}

微信小程序输入事件防抖

注:本次例子是在小程序中封装的输入框组件,请结合自己需求进行相应灵活更改。
输入框组件的 data 对象

  /*** 组件的初始数据*/data: {// 延迟时间毫秒delay: 500,// 执行防抖函数的返回函数引用delayFun: null,},
  1. 首先必须有一个防抖函数(这是废话),可用上面的防抖方法。
/*** 防抖*/debounce(fn, delay) {let timer = null;return function () {if (timer) {clearTimeout(timer);}timer = setTimeout(() => {fn.apply(this, arguments);}, delay);}},
  1. 触发父组件的事件(仅在自己封装的输入框组件内可使用)
   /*** 向父组件触发 input 事件,可携带参数* @param {String} eventName 事件名称* @param {Any} value 传递的参数*/triggerEventToFather(eventName, value) {this.triggerEvent(eventName, value);}
  1. 执行防抖函数以获取防抖函数中的返回函数。
    这个关键,因为输入框输入事件进行防抖的是 debounce(fn,delay) 这个函数中的 return 出来的返回函数。
    // 执行防抖函数handleDebounceFn(debounceFn, ...arg) {return debounceFn(arg[0], arg[1]);},
  1. 在组件的生命周期钩子中实现防抖函数以获取返回函数
lifetimes: {// 组件创建完成attached: function () {// 执行防抖函数,返回函数(防抖函数的返回函数)// 注:this.handleDebounceFn(第一个参数是防抖函数,第二个参数是需要进行防抖的方法这里指的是触发父组件的函数,第三个参数是延迟时间) 返回的是防抖函数执行后的返回函数,最后保存函数引用交由输入框的输入事件执行,则整个输入防抖完成。let delayFun = this.handleDebounceFn(this.debounce, (eventName, value) => {this.triggerEventToFather(eventName, value)}, this.data.delay);// 将this.handleDebounceFn 函数的返回的函数引用保存到 data 中。this.setData({delayFun})},},
  1. 输入框的输入事件
    // 输入框的事件handleInput(e) {// 防抖-输入// 执行 data 中的 delayFun 函数this.data.delayFun("search-input", e.detail.value);},
  1. 在父组件中触发 search-input 事件即可。

微信小程序实现输入框防抖相关推荐

  1. 微信小程序获取输入框(input)内容

    微信小程序---获取输入框(input)内容 wxml <input placeholder="请输入手机号码" maxlength="11" type= ...

  2. 微信小程序 input 输入框控件 bindinput 没有响应

    微信小程序 input 输入框控件 bindinput 没有响应 问题: 微信小程序 input 输入框控件 bindinput 没有响应 原因: 我以为是我这边的问题,检查很多遍检查不出来,最后换个 ...

  3. 微信小程序自定义输入框个数

    一.使用到的知识点 1.微信小程序Number()和parseInt() 2.colorui的var组件 3.wx.setStorageSync保存至本地缓存 二.关键源码 <view clas ...

  4. 华为手机 微信小程序 input输入框上移

    不知道大家有木有遇到过 微信小程序的input 调起输入法的时候 会被挤上去 输入框跑到上面去了 无论css怎么写怎么布局 还是会跑上移 尤其是测试mm的华为手机 别的手机都OK的 解决的方法是 给i ...

  5. 微信小程序 textarea输入框内文字,从中间删除快的时候,光标会从中间跳到最后位置

    场景: 微信小程序真机中 textarea输入框内有很多文字,从中间删除文字,速度快的时候,光标会从中间跳到最后位置! 原因: input.textarea事件中,给input框绑定任何事件后,在处理 ...

  6. 微信小程序实现输入框与文本框数值联动效果

    本篇文章主要讲解微信小程序下,input输入框输入后,页面中的文本信息进行即时更新联动的效果实现方法 日期:2022年10月4日 作者:任聪聪 一.效果演示 二.实现思路 给input框进行绑定函数, ...

  7. 微信小程序: input输入框placeholder样式的修改

    相信大伙在开发微信小程序的时候都会遇到这种问题.因为客户的需求,所以我们需要对input框中的placeholder的样式进行修改.接下来告诉大家怎么修改,该方法仅适用于微信小程序. 一.我们要给pl ...

  8. 微信小程序input输入框密码的显示与隐藏

    1.实现效果 2.实现原理 input的type之中并无password属性. 小程序提供了一个password属性,用来表示是否是密码类型. 关键思路:动态改变password的值,从而实现密码的显 ...

  9. 微信小程序input输入框关键字自动联想及关键字高亮

    找了好多博客都没有找到关于小程序,模糊查询,自动联想,和关键字高亮显示的文章,没办法,自己造吧. 本文采用的是动态联想,即在input框中输入关键字后,将关键字作为条件去数据库查询,然后将所有查询结果 ...

最新文章

  1. FastCGI与php-fpm
  2. 值得安利!8款windows神级软件,真解决了不少痛点啊!
  3. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...
  4. 异步调用代码嵌套问题
  5. asp.net开发 网络硬盘[转贴+删节]
  6. web ua检测_UA Web挑战会议:针对初创公司的SpringIO
  7. CCIE-LAB-第六篇-IPV6+SLLAC
  8. CentOS 7安装配置vsftpd做FTP服务
  9. 产品经理与交互设计师的对话——需求是如何变成产品原型的(转)
  10. 【Computer Organization笔记26】总线 bus :多个部件之间进行数据传送的共享通道,总线设计 - 总线仲裁、数据传输模式、提高总线性能
  11. pytorch自带网络_一篇长文学懂 pytorch
  12. 服务器自带raid功能吗,服务器的 RAID 功能介绍
  13. L5语言模型与数据集
  14. Web自动化测试之playwright:设置浏览器语言
  15. 推荐一款过滤百度广告的神器
  16. ios面试题 看了就知道哪方面需要加强上机练习
  17. 阿里巴巴erp【商业化操作系统】什么是erpadmin
  18. 微软小娜国外服务器,国外主持人苹果siri和微软小娜测评对比
  19. 湖北大学计算机考研参考书,湖北大学2018考研专业课参考书
  20. linux运行fastboot脚本,fastboot命令的自动补全

热门文章

  1. ajax prototype框架之Ajax.Request 类
  2. 有好多的非处女们确实让大家反感,知道为什么吗?其实你们应该检讨下自己!
  3. 阿里云新手自营建站指南
  4. 【产品-Tools】如何使用项目管理工具SmartSheet和TeamGannt
  5. Juicer模板渲染举例
  6. Win XP操作系统无法关机时如何强制软关机
  7. 现代控制理论-章节组织结构和仿真应用案例详细分析
  8. NEAR开发者认证 NCD - Day3
  9. readlink 函数用法
  10. DevOps系列之 —— 持续开发与集成(五)华为云 DevCloud 代码托管服务及 CloudIDE