JS防抖模糊查询

文章介绍了JavaScript中的防抖(debounce)技术,其主要作用是延迟函数执行,当事件频繁触发时避免过多调用。文中给出了防抖在输入框模糊查询场景下的应用实例,通过创建防抖函数减少不必要的计算和渲染,提高性能。用户输入时,防抖函数确保在输入停止后一段时间才执行搜索,优化了用户体验。
摘要由CSDN通过智能技术生成

什么防抖?

1、当事件触发时,相应的函数不会被立即触发,而是会推迟执行。

2、当事件连续密集触发时,函数的触发会被一直推迟。

3、只有当等待一段时间后也没有再次触发该事件,那么才会执行响应函数。

4、总之,防抖就是讲函数的执行延迟一定事件,如果在改时间内重新触发事件,那么延时事件就会重置,只有真正达到延时时间,才会执行回调函数。

防抖的应用场景

1、输入框频繁输入内容,搜索或者提交信息

2、频繁点击按钮,触发某个事件

3、监听浏览器滚动事件

4、监听用户缩放浏览器resize事件

案例:防抖模糊查询

 // 准备好假数据
    let dataArray = ["猪猪侠", "菲菲公猪", "迷糊老登", "波比", "草人强", "拉斯妹", "强强科技", "特斯拉", "比特"]
    let input = document.querySelector("#ipt")
    let ul = document.querySelector(".ul")
    function debounce(fn, delay) {
        // time变量用于保存setTimeout返回的Id
        let timer = null
        return function () {
            // 判断定时器是否存在,如果存在则清除定时器
            timer && clearTimeout(timer)
            // 重新调用定时器
            timer = setTimeout(() => {
                // 改变函数指向
                fn.apply(this, arguments)
                timer = null
            }, delay)
        }
    }
    function inputChange(e) {
        // 创建一个用来容纳匹配结果的数组
        let result = []
        // 遍历所有数据判断如果data.match(input.value)找到了结果就把结果放到数组里面,没有找到就不放
        dataArray.forEach(data => data.match(input.value) === null ? result.push() : result.push(data.match(input.value).input))
        // 判断如果用户输入框里没有内容就把结果长度置为0
        if (input.value === "") result.length = 0
        // 遍历结果数组创建标签并往标签里面添加找到的结果
        result.forEach(data => {
            let li = document.createElement("li")
            li.innerHTML = data
            ul.appendChild(li)
        })
        // 判断如果用户重新输入把输入框置空后要把上一次渲染出来的标签删除
        let li = document.querySelectorAll("li")
        if (input.value === "") li.forEach(ele => ul.removeChild(ele))
    }

    let iprFn = debounce(inputChange, 1000)
    input.oninput = e => iprFn()
    // 绑定键盘事件
    input.onkeydown = e => {
        // 判断如果用户按下键盘就清空渲染好的数据并重新调用功能函数重新渲染
        if (e.keyCode) {
            document.querySelectorAll("li").forEach(ele => {
                ul.removeChild(ele)
                iprFn()
            })
        }
    }

防抖模糊查询

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿里多多酱a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值