关于html:防抖节流函数挂载全局使用

67次阅读

共计 1170 个字符,预计需要花费 3 分钟才能阅读完成。

* 防抖函数:
debounce.js

let timeout = null;

/**
 肯定工夫内,只有最初一次操作,再过 wait 毫秒后才执行函数
 * 
 * @param {Function} func 要执行的回调函数 
 * @param {Number} wait 延时的工夫
 * @param {Boolean} immediate 是否立刻执行 
 * @return null
 */
function debounce(func, wait = 500, immediate = false) {
    // 革除定时器
    if (timeout !== null) clearTimeout(timeout);
    // 立刻执行,此类情况个别用不到
    if (immediate) {
        var callNow = !timeout;
        timeout = setTimeout(function() {timeout = null;}, wait);
        if (callNow) typeof func === 'function' && func();} else {
        // 设置定时器,当最初一次操作后,timeout 不会再被革除,所以在延时 wait 毫秒后执行 func 回调办法
        timeout = setTimeout(function() {typeof func === 'function' && func();
        }, wait);
    }
}

export default debounce


节流函数

let timer, flag;
/**
 * 节流原理:在肯定工夫内,只能触发一次
 * 
 * @param {Function} func 要执行的回调函数 
 * @param {Number} wait 延时的工夫
 * @param {Boolean} immediate 是否立刻执行
 * @return null
 */
function throttle(func, wait = 500, immediate = true) {if (immediate) {if (!flag) {
            flag = true;
            // 如果是立刻执行,则在 wait 毫秒内开始时执行
            typeof func === 'function' && func();
            timer = setTimeout(() => {flag = false;}, wait);
        }
    } else {if (!flag) {
            flag = true
            // 如果是非立刻执行,则在 wait 毫秒内的完结处执行
            timer = setTimeout(() => {
                flag = false
                typeof func === 'function' && func();}, wait);
        }

    }
};
export default throttle

挂载全局 :
main.js

import throttle from './utils/throttle'
Vue.prototype.$throttle = throttle
import debounce from './utils/debounce'
Vue.prototype.$debounce = debounce

正文完
 0