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 ... 
随机推荐
- druid数据源连接oracle10g报错:not support oracle driver 1.0
			jdbc驱动与数据库版本不一致,去数据库服务器的安装目录(cd $ORACLE_HOME)找jdbc->lib->ojdbcX.jar 替换到你项目中即可. oracle目录lib下jar ... 
- 教你如何修改运行中的docker容器的端口映射
			在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ... 
- 关于Xocd升级 cocopoads无法使用的解决
			最近由于工作原因,升级了下Xcode,以前是8.1现在升级到了8.3,导致无法使用了cocopoads,研究了好久终于找到了解决办法. 先描述下我的几个问题吧. 1.当运行cocopoads的时候出现 ... 
- LDAP&IMPLEMENTATION
			LDAP是轻量目录访问协议,英文全称是LIGHTWEIGHT DIRECTORY ACCESS PROTOCOL,一般都简称为LDAPLDAP的特点1.LDAP 是一种网络协议而不是数据库,而且LDA ... 
- go 语言
			go语言(或 Golang)是Google在 2007 年开发的一种开源编程语言,于2009年11月开源,2012年发布go稳定版 go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语 ... 
- webservice接口的开发和调用
			一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ... 
- 作业(更新ing)
			暴政警告 2019.4.19 1.YBT完成 7 道题目(1)广搜 3 道 (2)最短路 4 道 2.写至少 2 篇博客 (据说集中精力,一个上午/下午就能写完) 1. 一个 又一个 球细胞数目 ... 
- vue-loader的理解
			1.vue-loader是webpack的加载器,允许以单文件组件(SFC)的格式创作Vue组件 2.允许对Vue组件的每个部分使用其他webpack加载器 3.允许.vue文件中的自定义块可以应用自 ... 
- No bean named 'dataSource' is defined
			jar包导入多了,导jar包只需引用一次,如果dao层引用了pojo,然后service只需引用dao就可以引用pojo,然后重新maven install 就好了 如果删除导入多余的jar包不行, ... 
- CentOS 离线安装 MYSQL+APACHE+PHP
			一.MYSQL安装 下载MYSQL安装包:MySQL-client-XXX.rpm MySQL-server-XXX.rpm MySQL-devel-XXX.rpm 如有冲突,要先删除原来的M ... 
