uniapp输入框的防抖处理

1. 在 data 中定义一个 setTimeout 的名字

 data() {
      return {
        timer: null // 延时器的名字
      };
    },

2. 在 监听 input 输入事件的函数内编写如下代码:

 methods:{
      input(e){
        // 每次触发输入事件的时候先清除定时器
        clearTimeout(this.timer)

        // 每隔 500毫秒 调用
        this.timer = setTimeout(()=> {
          console.log(e)
        }, 500)
      }
    }

3. 完整代码如下:

注意我用的是 uni-search-bar 组件,这里我主要讲的是 输入框防抖处理,大家的样式可能跟我的不一样

<template>
  <view>
    <view class="search-box">
      <!-- 监听 input 事件 -->
        <uni-search-bar :focus="true" @input="input" :radius="100" :cancelButton="none"></uni-search-bar>
    </view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        // 定时器的名字
        timer: null
      };
    },
    methods:{
      input(e){
        // 每次触发 input 事件清除一次定时器
        clearTimeout(this.timer)
        
        // 每隔 500毫秒 触发定时器
        this.timer = setTimeout(()=> {
          console.log(e)
        }, 500)
      }
    }
  }
</script>

<style lang="scss">

</style>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp输入框(`UI.input`)本身并不内置防抖或节流功能,但你可以通过在事件处理程序中手动实现这两个概念来优化输入事件的响应。防抖和节流是常见的性能优化技术,用于减少高频重复事件的执行次数,防止资源过度消耗。 **防抖(Debounce)**: - 防抖的目的是确保在一个输入停止后一段时间内,只执行一次特定的处理函数,比如发送网络请求。 - 当连续触发输入事件时,只有最后一次的事件会被处理,其余的会被忽略,直到输入暂停超过设定的时间(如200毫秒)。 **节流(Throttle)**: - 节流则是确保在一定时间内,最多执行某函数的指定次数,即使输入频繁触发。 - 它会在一定时间间隔(如500毫秒)内执行函数,如果在这段时间内又有新的输入事件,那么会取消之前正在执行的任务,等待下一次节流周期。 要实现这些效果,你可以在处理 `input` 事件的回调函数中使用 JavaScript 的内置方法,如下所示: ```javascript let timerId; const handleInput = (event) => { clearTimeout(timerId); timerId = setTimeout(() => { // 这里是你需要执行的处理逻辑,例如发送数据到后台 sendDataToServer(); }, 200); // 200毫秒的防抖时间(根据需求调整) }; UI.input.on('input', handleInput); ``` 或者使用第三方库(如lodash的debounce或lodash.throttle),这样代码更简洁: ```javascript import { debounce } from 'lodash'; UI.input.on('input', debounce(handleInput, 200)); ``` **相关问题--:** 1. 如何在UniApp中使用自定义防抖或节流函数? 2. 为什么要用防抖而不是节流来限制输入事件的响应? 3. 如果输入事件非常密集,单纯的防抖或节流会有什么问题?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值