zoukankan      html  css  js  c++  java
  • 延迟搜索逻辑实现

    简介

    在移动端或者pc端有时候要做实时搜索的效果,即根据用户输入的内容,实时调取接口获得相关的列表。但是我们并不希望每增加或者减少一个字就立马调取接口,因为这样请求次数太多而且打字速度快的话会不断的请求很耗性能,所以我们希望能够在打字结束后的一段时间内发起请求,尽量少的调取接口

    效果如图:

    实现逻辑

    我是使用的vue,所以以下均为vue代码

    下面讲一下逻辑流程

    1.双向绑定输入框内的数据,使用watch监听输入框内数据的变化

    2.在data中定义变量timer: null

    3.当监听到输入框内变化时给timer定义一个延时器,具体延迟时间可以自己定,用以延迟触发调用接口

    4.仅这样做并不能达到想要的效果,因为每一次改变还是会调用接口,关键的是要在监听到输入框改变的时候判断timer 是否存在如果存在就将上一次的延时器清除,因为上一个延时器延迟300ms的缘故,所以搜索不会立即触发,清除定时器后就不会再去请求接口,这样就可以实现延时搜索

    参考代码如下:

    <el-input type="text" class="myinput" placeholder="请输入会员姓名或手机号" v-model="customer" clearable></el-input>
      watch: {
        customer() {
          this.showCustomerList = true
          let reg_number = /^[0-9]*$/
          if (this.timer) {
            clearTimeout(this.timer)
          }
          if (!this.customer) {
            this.matchedCustomerList = []
            return
          } else {
            if (reg_number.test(this.customer)) {
              if (this.customer.length > 3) {
                this.timer = setTimeout(() => {
                  this.search()
                }, 300)
              }
            } else {
              this.timer = setTimeout(() => {
                this.search()
              }, 300)
            }
          }
        }
      }

    小结

    这样的搜索优化其实应该要注意的,就是这样的小细节,让用户体验和产品都有所提升

  • 相关阅读:
    青檬音乐台闲时听听电台吧
    [转]What is AOP?
    实现页面元素拖动效果的JS函数
    gorithms.算法概论.习题答案
    Asp.Net读取并显示Excel文件中的内容(OleDb方式)
    收藏的一些小软件
    Master Page Path (MasterPage 相对路径)
    rundll32 netplwiz.dll,UsersRunDll
    关于锁
    我的回帖保存
  • 原文地址:https://www.cnblogs.com/till-the-end/p/10000862.html
Copyright © 2011-2022 走看看