函数节流和防抖实现

HTML 代码
在这里插入图片描述

  <div class="app">
        <input type="text" id="inppp" />没有节流防抖的input
        <input type="text" id="debounceid" /> 防抖的input
        <input type="text" id="throttleid" /> 节流的input
    </div>
    <script>
        var inppp = document.getElementById("inppp")
        var debounceid = document.getElementById("debounceid")
        var throttleid = document.getElementById("throttleid")

        // 监听原始事件, 无防抖,节流
        inppp.addEventListener('keyup', function (e) {
            ajax(e.target.value)
        })

        debounceid.addEventListener('keyup', function (e) {
            bebounded(e.target.value)
        })
        throttleid.addEventListener('keyup', function (e) {
            throttled(e.target.value)
        })


        let bebounded = debounce(ajax, 500)
        let throttled = throttle(ajax, 1000)


        // 定义回调函数
        function ajax(content) {
            console.log('ajax request' + content)
        }
    </script>

JS代码:JS文件需要单独引用----------------------- 节流throttle 定时器和时间戳模式二选一

// 简单实现过程!
function debounce(fn, delay) {
    // 定义定时器
    let timer
    return function (args) {
        let that = this
        clearTimeout(timer)
        timer = setTimeout(() => {
            fn.call(that, args)
        }, delay)
    }
}

// 时间戳模式
function throttle(fn, delay) {

    // 定义时间戳
    let previous = 0
    return function (arg) {
        var that = this
        // 将时间变为number
        let newDate = +new Date()

        if (newDate - previous > delay) {
            fn.call(that, arg)
            previous = newDate
        }
    }
}
// 定时器模式
function throttle(fn, delay) {
    let timer
    return function (arg) {
        var that = this
        if (!timer) {
            timer = setTimeout(() => {
                timer = null
                fn.call(that, arg)
            }, delay)
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值