0b28a40e创建于 2024年9月26日历史提交
let timer; let
    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