首页 > 生活服务 > 程序猿源

程序猿源

JS频率控制函数

管理员 2年前 1628浏览
/**
 * 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次
 * @param  {Function}   fn        需要调用的函数
 * @param  {Number}     delay     延迟时间,单位毫秒
 * @param  {Boolean}    immediate 给immediate参数传递false绑定的函数先执行,而不是delay后后执行。
 * @param  {Boolean}    debounce  是否使用debounce
 * @return {Function}             实际调用函数
 */
var throttle = function(fn, delay, immediate, debounce) {
    var curr = +new Date(), //当前事件
        last_call = 0,
        last_exec = 0,
        timer = null,
        diff, //时间差
        context, //上下文
        args,
        exec = function() {
            last_exec = curr;
            fn.apply(context, args);
        };
    return function() {
        curr = +new Date();
        context = this,
            args = arguments,
            diff = curr - (debounce ? last_call : last_exec) - delay;
        clearTimeout(timer);
        if (debounce) {
            if (immediate) {
                timer = setTimeout(exec, delay);
            } else if (diff >= 0) {
                exec();
            }
        } else {
            if (diff >= 0) {
                exec();
            } else if (immediate) {
                timer = setTimeout(exec, -diff);
            }
        }
        last_call = curr;
    }
};

/**
 * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于delay,fn才会执行
 * @param  {Function}   fn        要调用的函数
 * @param  {Number}     delay     空闲时间
 * @param  {Boolean}    immediate 给immediate参数传递false绑定的函数先执行,而不是delay后执行。
 * @return {Function}             实际调用函数
 */
var debounce = function(fn, delay, immediate) {
    return throttle(fn, delay, immediate, true);
}



版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";

评论

收藏

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

Powered By 重庆饭哥 © 2014-2022 教学资源分享站 渝ICP备20005643号-1

相信有一天,理想主义终将所向披靡.

Design by © 2021 XIFAN. Powered by 重庆饭哥

站点声明: 本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

友情链接: 官方网站 饭哥在线工具 饭哥导航 在线运行 博客交流社区 重庆艺术工程职业学院