• uniapp搜索框防抖、自动获取焦点


    1.搜索框基本UI结构

    1. class="search-box">
    2. <uni-search-bar @input="input" :radius="100" cancelButton="none">uni-search-bar>
    1. .search-box {
    2. //实现吸顶效果
    3. position: sticky;
    4. top: 0;
    5. //防止被后面的图片覆盖
    6. z-index: 999;
    7. }
    1. //input事件处理函数
    2. methods: {
    3. input(e) {
    4. // e.value 是最新的搜索内容
    5. console.log(e.value)
    6. }
    7. }

    uni-search-bar官方教学:uni-app官网 

    2.自动获取焦点

    目的:实现跳转到本页面后光标立即定位到搜索框中

    修改 components -> uni-search-bar -> uni-search-bar.vue 组件,把 data 数据中的 show 和 showSync 的值,从默认的 false 改为 true 即可:

    3.防抖处理

    问题:因为搜索框input函数只要输入便会记录输入值,但是很多情况下输入过程中的值并不是我们想要的,所以不需要读取

    方案:设置延时器,规定时间内连续输入则input函数不会读取

    在 data 中定义防抖的延时器 timerId 如下:

    1. data() {
    2. return {
    3. // 延时器的 timerId
    4. timer: null,
    5. // 搜索关键词
    6. kw: ''
    7. }
    8. }

    修改 input 事件处理函数如下:

    1. input(e) {
    2. // 清除 timer 对应的延时器
    3. clearTimeout(this.timer)
    4. // 重新启动一个延时器,并把 timerId 赋值给 this.timer
    5. this.timer = setTimeout(() => {
    6. // 如果 500 毫秒内,没有触发新的输入事件,则为搜索关键词赋值
    7. this.kw = e.value
    8. console.log(this.kw)
    9. }, 500)
    10. }

    注意:我们页面中使用了定时器,在离开这个页面的时候一定要记得清除,避免出现bug。

    扩展:settimeout和setinterval之间有什么区别?

    区别:setTimeout只运行一次,也就是说设定的时间到后就触发运行指定代码,运行完后即结束;而etinterval是一直循环运行下去,即每到设定时间间隔就触发指定代码,要想停止,需要使用clearInterval()函数。

    定时器官方介绍:setTimeout(callback, delay, rest) | uni-app官网

  • 相关阅读:
    RDB与AOF
    [C/C++]数据结构 链表OJ题:环形链表(如何判断链表是否有环)
    MYSQL函数,一篇文章看完!
    aiohttp从入门到精通
    MySQL创建只读用户并授权
    React Native 入门(三)——js与native互相通信
    Qt 简约美观的动画 摆钟风格 第十季
    Springboot整合整合Swagger3
    Spring Aop
    vue2.x源码刨析-new Vue的时候做了什么(手写简易版01)
  • 原文地址:https://blog.csdn.net/m0_63748493/article/details/126893357