js 防抖

// 防抖 作用:防止重复触发事件
var count = 1;
var container = document.getElementById('container');

function getUserAction(e) {
    // console.log(this)
    // console.log(e);
    container.innerHTML = count++;
}

// container.onmouseover = getUserAction
/**
 *
 * @param {*} func 回调方法
 * @param {*} wait 等待时长
 * @param {*} immediate immediate 是否立即执行,触发事件的几秒内不能重复触发; false:等待wait时间后再触发函数,只执行一次
 * @returns
 */
function debounce(func, wait, immediate) {
    var timeout;
    console.log(arguments, 'arguments')
    return function() {
        var context = this;
        var args = arguments;
        console.log(args, 'args');
        // 如果有timeout,那么清除timeout
        if(timeout) clearTimeout(timeout);
        if(immediate) {
            // 如果immediate为true的时候,vallNow肯定是ture; 当 callNow 是true的时候也就是 timeout 为null
            var callNow = !timeout
            console.log(timeout)
            timeout =  setTimeout(function() {
                timeout = null;
            }, wait)
            if(callNow) func.apply(context, args)
        }else {
            console.log(timeout, 'timeout')
            timeout = setTimeout(() => {
                func.apply(context, args)
            }, wait)
        }
    }
}

container.onmousemove = debounce(getUserAction, 2000, true);
posted @ 2023-02-11 18:20  zzzzzyyyyyy  阅读(36)  评论(0编辑  收藏  举报