美文网首页
绝妙的函数:重复触发防抖

绝妙的函数:重复触发防抖

作者: 喜欢唱歌的小狮子 | 来源:发表于2019-01-23 10:34 被阅读0次

    Awesome Function: debounce

    在线演示

    利用闭包保存定时器的debounce函数

    // 利用闭包保存定时器的debounce函数
    const debounce1 = function () {
        let timer = null
        return function (fn, wait, scope) {
            clearTimeout(timer)
            timer = setTimeout(function () {
                fn.call(scope)
            }, wait)
        }
    }()
    
    // 按钮触发事件
    debounce1(() => {
        paras[index - 1].innerHTML += ' 执行的内容'
    }, 1000)
    

    利用函数属性保存定时器的debounce函数

    // 利用函数属性保存定时器的debounce函数
    const debounce2 = function (fn, wait, scope) {
        clearTimeout(debounce2.timer)
        debounce2.timer = setTimeout(function(){
            fn.call(scope)
        }, wait)
    }
    
    // 按钮触发事件
    debounce2(function () {
        paras[index - 1].innerHTML += ' 执行的内容'
    }, 1000)
    

    可配置是否立即执行的debounce函数

    // 可配置是否立即执行的debounce函数
    const debounce3 = function () {
        let timer = null
        return function (fn, wait, scope, immediate) {
            timer && clearTimeout(timer)
            if (immediate) {
                !timer && fn.call(scope)
                timer = setTimeout(() => {
                    timer = null
                    count = 0
                }, wait)
            } else {
                timer = setTimeout(function () {
                    fn.call(scope)
                    timer = null
                }, wait)
            }
        }
    }()
    
    // 按钮触发事件,立即执行的内容
    debounce3(function () {
        paras[index - 1].innerHTML += ' 立即执行的内容'
    }, 1000, null, true)
    
    // 按钮触发事件,延迟执行的内容
    debounce3(function () {
        paras[index - 1].innerHTML += ' 延迟执行的内容'
    }, 1000)
    

    相关文章

      网友评论

          本文标题:绝妙的函数:重复触发防抖

          本文链接:https://www.haomeiwen.com/subject/vicjjqtx.html