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,解锁操作之前,不能重复操作的更多相关文章
- js实现动态操作table
本章案例为通过js,动态操作table,实现在单页面进行增删改查的操作. 简要案例如下: <%@ page language="java" contentType=&quo ...
- nw.js如何处理拖放操作
nw.js如何处理拖放操作 其实拖放(drag-drop)操作是Html5的功能,不是nw.js的内置API,那么我们采用Html5应用一般的处理方法就可以了. 首先我们看一下一个正常的页面,直接拖放 ...
- JS实现 键盘操作
JS实现 键盘操作: 详情可以去其逛网查看其API并下载,地址:http://craig.is/killing/mice <!DOCTYPE html PUBLIC "-//W3C// ...
- js数组的操作及数组与字符串的相互转化
数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...
- JS封装cookie操作函数实例(设置、读取、删除)
本文实例讲述了JS封装cookie操作函数.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
- touch.js——常见应用操作
touch.js--常见应用操作 基本事件: touchstart //手指刚接触屏幕时触发 touchmove //手指在屏幕上移动时触发 touchend //手指从屏幕上移开时 ...
- JS 的骚操作
一.强制类型转换 1.1string强制转换为数字 //可以用*1来转化为数字((实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为NaN,或者使用 a !== a 来判 ...
- js之数组操作
js之数组操作 前言 本文主要从应用来讲数组api的一些操作,如一行代码扁平化n维数组.数组去重.求数组最大值.数组求和.排序.对象和数组的转化等.(文章摘自:https://segmentfault ...
- [转]Node.JS使用Sequelize操作MySQL
Sequelize官方文档 https://sequelize.readthedocs.io/en/latest/ 本文转自:https://www.jianshu.com/p/797e10fe23 ...
随机推荐
- redis命令行操作
打开shell,首先开启redis服务,在保证服务开启的情况下,打开客户端. 然后可以根据文档,进行命令行试验.
- MyBatis探究-----返回Map类型数据
1.使用@MapKey @MapKey:告诉mybatis封装Map的时候使用哪个属性作为Map的key Map<K, V>:键是这条记录的主键key,值是记录封装后的javaBean 1 ...
- WPF Combobox数据绑定 Binding
combobox数据绑定List链表集合区分显示值与选择的值 整体效果: 根据combobox选择情况分别打印选取值与显示值 代码: Windows窗体: <Window x:Class=&qu ...
- CentOS7运行报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s
CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh.CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watc ...
- getparameter的使用
在做项目的过程中,会遇到跳转的页面,直接打开到里面的子项,这个时候,看了UI给我设计了四个页面,如果做四个页面,肯定是可以实现的.但是这个不符合前端的设计.就在想通过点击传值进去,肯定是能够获取到的. ...
- 【SparkStreaming学习之三】 SparkStreaming和kafka整合
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- Caravel–一款开源OLAP+数据可视化分析前端工具,支持Druid和Kylin
参考此文:http://lxw1234.com/archives/2016/06/681.htm
- Web Deploy 发布网站错误 检查授权和委派设置
Web Deploy发布ASP.NET网站给我们提供方便,配置好后可以很方便地发布网站到IIS服务器. 自安装Web Deploy一年以来,一直都用得好好地. 直到最近,Gitlab-CI自动发布出了 ...
- springboot整合mybatis(使用MyBatis Generator)
引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...
- 关于微信unionid理解
微信开放平台下的UnionID 同一个开放平台账号下,如果有若干个不同App应用,不同Web应用,不同公众平台号,只要是同一个用户,那么他的UnionID相同: 如果开放平台不同,那么不同开放平台下同 ...