如何实现一个方法在30秒内只能调用一次(按上次调用时间开始),

发布于 2022-09-03 08:29:03 字数 52 浏览 22 评论 0

1,如题有多少种方法 ?2,是否可以封装成一个公用的方法? 大家有什么例子一起交流下啊~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

探春 2022-09-10 08:29:03
function throttle (func, duration) {
    // duration 以秒计
    let last
    return function () {
         let now = Date.now()
         if (last && (now - last) < duration * 1e3) return
        last = now
        func.apply(this, arguments)
    }
}

手机码字

·深蓝 2022-09-10 08:29:03
var method = (function () {
    var wait = 0,
    t,
    timer = function () {
        wait = 30;
        t = setInterval(function () {
                if (wait) {
                    wait--;
                } else {
                    clearInterval(t);
                }
            }, 1000);
    }
    return function () {
        if (wait === 0) {
            //do something
            timer();
        } else {
            alert('技能冷却中,还需' + wait + '秒。');
        }
    }
})();

临时写的,没有测试过,不知道有没有效果。

改成下面这种,算不算封装?

/*
options = {
    wait : 30,
    onResolved : function(){},
    onRejected : function(){}
}
*/

var define = function (options) {
    options = typeof options === 'object' ? options : {};

    return (function () {
        var wait = 0,
        t,
        timer = function () {
            wait = ((typeof options.wait === 'number') && (options.wait >= 0)) ? options.wait : 30;
            t = setInterval(function () {
                    if (wait) {
                        wait--;
                    } else {
                        clearInterval(t);
                    }
                }, 1000);
        }
        return function () {
            if (wait === 0) {
                (typeof options.onResolved === 'function') && options.onResolved();
                timer();
            } else {
                (typeof options.onRejected === 'function') && options.onRejected();
            }
        }
    })();
}
网白 2022-09-10 08:29:03

一般的解决方法就是使用闭包,上面老师的解答都是这个思路,我认为挺好的。如果要使用公共的方法,也很简单,将方法挂到window下即可,如下:

(function(){
    let last
   window.dont30second=function(func, duration) {
         let now = Date.now()
         if (last && (now - last) < duration / 1e3) return
        last = now
        func.apply(this, arguments)
    }
 })();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文