var cb = Callback('memory once') // 得到一个拥有记忆功能并只执行一次的回调模块
var callbackState = {}
var createCallbackState = function (options) {
var states = options.split(' ')
var obj = {}
for (var i = 0; i < states.length; i++) {
obj[states[i]] = true
}
return obj
}
var Callback = function (options) {
var state = callbackState[options] //获取状态模式
if (!state) {
callbackState[options] = state = createCallbackState(options)
}
var list = [], // 回调函数列表
memory, // 存储是否为 记忆状态
has = function (fn) {
for (var i = 0; i < list.length; i++) {
if (list[i] === fn) {
return true
}
}
return false
},
add = function () {
var i = 0,
args = arguments,
len = args.length
for (; i < len; i++) {
if (state.unique && has(args[i])) { // 如果是unique状态下并回调列表已经拥有该函数,则不添加
continue
}
list.push(args[i])
}
},
fire = function (context, args) {
var i = 0,
len = list.length,
item
for (; i < len; i++) {
item = list[i]
if (item.apply(context,args) === false && state.stopOnFalse) { //如果函数运行返回false,并且是stopOnFalse状态,终止循环
break;
}
}
}
return {
add: function () {
add.apply(null,arguments)
// 如果memory模式并且已经拥有了memory信息,接着出发函数
if (state.memory && memory) {
fire(memory[0], memory[1])
list = []
}
},
fire: function (context, args) {
// 如果memory模式,并且list是空,代表触发在添加前,保存memory信息
if (state.memory && !list.length) {
memory = [context, args]
return
}
fire(context,args)
if (state.once) {
this.clear()
}
},
has: function (fn) {
return has(fn)
},
clear: function () {
list = []
}
}
}
add.apply(null,arguments)
// 如果memory模式并且已经拥有了memory信息,立刻触发函数
if (state.memory && memory) {
fire(memory[0], memory[1])
list = []
}
var cb = Callback('memory') // 得到记忆功能的回调模块
cb.fire() // 触发回调队列
cb.add(fn) //添加回调函数,自动执行了!
function fn () {
console.log('fn')
}
// 如果memory模式,并且list是空,代表触发在添加前,保存memory信息
if (state.memory && !list.length) {
memory = [context, args]
return
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有