zoukankan      html  css  js  c++  java
  • emitter 增强 多条件触发

     1 ;(function(global ,undefined){
     2     var evts = {}
     3         ,onceTag = '__event_once'
     4     function emit(event ){
     5         var args = util.toArray(arguments , 1)
     6         if (!(event in evts)) return
     7         var _dels = []
     8         for (var i = 0 , j = evts[event].length ; i < j ;i ++){
     9             var cbk = evts[event][i]
    10             if (!cbk) return
    11             cbk.apply(null , args)
    12             if (cbk[onceTag])  { evts[event][i] = null ; _dels.push[i]}
    13         }
    14         for (var i = _dels.length -1 ; i>=0 ; i--) evts[event].splice(_dels[i] , 1)
    15     }
    16 
    17     function addMultiCon(event , listener){
    18         var once = true
    19         event.sort()
    20         addListener(event.join('|') , listener , once)
    21         var eventBubbles = []
    22         function tinOpener(evt){
    23             eventBubbles.push(evt)
    24             if (eventBubbles.length >=  event.length) {
    25                 eventBubbles.sort()
    26                 emit(eventBubbles.join('|'))
    27             }
    28         }
    29 
    30         for (var i = 0 ; i < event.length;i ++){
    31             addListener(event[i] , tinOpener.bind(null, event[i]) , once)
    32         }
    33     }
    34 
    35     function addListener(event , listener , once){
    36         if (util.isArray(event)) return addMultiCon(event , listener)
    37 
    38 
    39         if (!(event in evts)) evts[event] = []
    40         if (once) listener[onceTag] = true
    41         evts[event].push(listener)
    42     }
    43 
    44     function removeListener(event, listener){
    45         if (!listener) {
    46             delete evts[event]
    47             return
    48         }
    49         for (var i = 0 , j = evts[event].length ; i < j ;i ++){
    50             if (evts[event][i] === listener) {  evts[event].splice(i, 1) ; break}
    51         }
    52     }
    53 
    54     function listeners(event){
    55         return evts[event]
    56     }
    57     global.emitter = {
    58         on : addListener
    59         ,once : function(event , listener){
    60                 addListener(event , listener , true)
    61                 }
    62         ,emit : emit
    63         ,listeners : listeners
    64     }
    65 })(this)
     function toArray(colletions ,offset){
        return Array.prototype.slice.call(colletions , offset || 0)
    }

    emitter.on(['test','test2'] , function(){
       console.log('test is fired')
    })

    emitter.emit('test')

    emitter.emit('test2')

  • 相关阅读:
    jquery 实现 html5 placeholder 兼容password密码框
    php返回json的结果
    使用PHP读取远程文件
    Sharepoint 自定义字段
    Sharepoint 中新增 aspx页面,并在页面中新增web part
    【转】Sharepoint 2010 配置我的站点及BLOG
    JS 实现 Div 向上浮动
    UserProfile同步配置
    【转】Import User Profile Photos from Active Directory into SharePoint 2010
    Sharepoint 2010 SP1升级后 FIMSynchronizationService 服务无法开启
  • 原文地址:https://www.cnblogs.com/vaal-water/p/3949359.html
Copyright © 2011-2022 走看看