lockable JS function,解锁操作之前,不能重复操作

Posted 大胡子毛绒老头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lockable JS function,解锁操作之前,不能重复操作相关的知识,希望对你有一定的参考价值。

        (function () {
            var ed = [];
            window.Lockable = function (lockF, options) {
                if (!arguments.length) {
                    var caller = arguments.callee.caller;
                    if (ed.indexOf(caller) === -1) {
                        ed.push(caller);
                        caller.unlock = function () {
                            ed.splice(ed.indexOf(caller), 1);
                        };
                        return;
                    }
                    return true;
                }
                var empty = function () { },
                    on = options && options.on || empty,
                    off = options && options.off || empty,
                    repeat = options && options.repeat || empty,
                    ing,
                    ri = 1;
                if (typeof options === "function") {
                    off = options;
                }
                var f = function () {
                    "use strick"
                    if (ing) {
                        repeat(ri++);
                        return;
                    }
                    if (on()) {
                        ing = false;
                        return;
                    }
                    var r = lockF.apply(this, arguments);
                    if (typeof r === "undefined") {
                        ing = true;
                    } else {
                        ing = !!r;
                    }
                };
                f.unlock = function () {
                    ing = false;
                    off.apply(arguments);
                };
                return f;
            }
        })();

使用方法:

var functionName = Lockable(function(){
  //needs long time.
  functionName.unlock();
});

setInterval(functionName, 111);

或者:

function fn(){
    if(Lockable()) {
        return;
    }
    //needs long time
    fn.unlock();
}
setInterval(fn, 111);
 

 

以上是关于lockable JS function,解锁操作之前,不能重复操作的主要内容,如果未能解决你的问题,请参考以下文章

50-Jenkins-Lockable Resources插件实现资源锁定

使用 rollup 打包一个原生 js + canvas 实现的移动端手势解锁功能组件

使用 rollup 打包一个原生 js + canvas 实现的移动端手势解锁功能组件

jQuery滑动解锁

js实现滑动解锁功能(PC+Moblie)

OpenHarmony - 基于 ArkUI(JS)实现图案解锁组件