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

时间:2023-03-09 03:42:58
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);