手写节流throttle

节流 throttle(一段时间内只执行一次handle函数)

const div1 = document.getElementById('div1')

let timer = null
div1.addEventListener('drag',function (e) {
    if (timer){
        return
    }
    timer = setTimeout(() => {
        console.log(e.offsetX,e.offsetY)
        timer = null
    },100)
})

简单的节流实现的逻辑

给div监听拖拽事件,一开始timer为null,在100ms之内设置一个计时器赋值给timer,当到达100ms时触发计时器,返回打印拖拽的实时坐标,将null赋值给timer,之后继续拖拽,再次创建一个新的计时器赋值给timer,在100ms内,拖拽是不间断执行的,每隔100ms打印一次结果。

工具化写法

function throttle(fn,delay = 100) {
    let timer = null

    return function () {
        if (timer) {
            return
        }
        timer = setTimeout(() => {
            fn.apply(this,arguments)
            timer = null
        },delay)
    }
}

div1.addEventListener('drag',throttle(function (e) {
    console.log(e.offsetX,e.offsetY)
},200))
posted @ 2020-12-24 17:28  `Duet`  阅读(115)  评论(0编辑  收藏  举报