防抖的兩種操作

一個假的前端男發表於2020-10-27

防抖:當事件被觸發時,設定一個週期延遲執行動作,若期間又被觸發,則重新設定週期,直到週期結束,執行動作

實現 通過滑鼠移動事件、改變num的值

    let num = 0
    let content = document.getElementById('box')
    function count() {
        content.innerHTML = num++
    }

//過兩秒後執行   (延時執行)
    // function debounce(func, delay) {
    //     let timeOut = null
    //     return function () {
    //         if (timeOut) clearTimeout(timeOut)
    //         timeOut = setTimeout(function () {
    //             func.apply(this, arguments)
    //         }, delay)
    //     }
    // }

// 先執行 過2秒  (立即執行)

        function debounce(func,delay){
            let timeOut=null
            return function () {
                if(timeOut) clearTimeout(timeOut)

                let  flag=!timeOut   //用來判斷是否有定時器的

                timeOut=setTimeout(()=>{   //增加一個定時器
                    timeOut=null   //清空當前定時器控制程式碼
                },delay)

                //判斷定時為空時 執行  所以第一次執行時執行
                if(flag){
                    func.apply(this,arguments)
                }

            }
        }

    content.onmousemove = debounce(count, 1000)

相關文章