隨筆 - 11  文章 - 3  trackbacks - 0
          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          特點:
          1.支持fn參數中使用this關鍵字
          2.相同fn綁定無效

          缺點:
          非ie下不能直接使用匿名函數直接當參數傳遞,這個誰有比較好的解決辦法么?


          CE.Event = {
              handler : 
          function(e){
                  e 
          = e || window.event;
                  
          var _fn = "_" + e.type;
                  
          if(this[_fn]){
                      
          for(var _f in this[_fn]){
                          
          this[_fn][_f].call(this,e);
                      }

                  }

              }
          ,
              bind : 
          function(obj, act, fn, capture){
              
          if(window.addEventListener){
                      obj.addEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          var _fn = "_" + act;
                      act 
          = "on" + act;
                      
          if(!obj[_fn]){
                          obj[_fn] 
          = [];
                          obj[act] 
          = CE.Event.handler;
                      }
          else{
                          
          for(var _f in obj[_fn]){
                              
          if(obj[_fn][_f].toString() === fn.toString()){return};
                          }

                      }

                      obj[_fn][obj[_fn].length] 
          = fn;
                  }

              }
          ,
              unbind : 
          function(obj, act, fn, capture){
                  
          if(window.removeEventListener){
                      obj.removeEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          var _fn = "_" + act;
                      
          if(obj[_fn]){
                          
          for(var _f in obj[_fn]){
                              
          if(obj[_fn][_f].toString() === fn.toString()){
                                  
          try{
                                      
          delete obj[_fn][_f];
                                  }
          catch(e){
                                      obj[_fn][_f] 
          = null;
                                  }

                                  
          return;
                              }

                          }

                      }

                  }

              }

          }
          ;

          提升了一下執行效率:

          CE.Event = {
              ecount : 
          1,
              handler : 
          function(e){
                  e 
          = e || window.event;
                  
          if(this.evns[e.type]){
                      
          for(var evn in this.evns[e.type]){
                          
          this.evns[e.type][evn].call(this,e);
                      }
                  }
              },
              bind : 
          function(obj, act, fn, capture){
                  
          if(window.addEventListener){
                      obj.addEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          if(!fn.id){fn.id = CE.Event.ecount++};
                      
          if(!obj.evns){obj.evns = {}};
                      
          if(!obj.evns[act]){
                          obj.evns[act] 
          = {};
                          
          if(obj["on" + act]){
                              obj.evns[act][
          0= obj["on" + act];
                          }
                      }
          else{
                          
          for(var evn in obj.evns[act]){
                              
          if(evn.id === fn.id){return;}
                          }
                      }
                      obj.evns[act][fn.id] 
          = fn;
                      obj[
          "on" + act] = CE.Event.handler;
                  }
              },
              unbind : 
          function(obj, act, fn, capture){
                  
          if(window.removeEventListener){
                      obj.removeEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          if(obj.evns && obj.evns[act]){
                          
          try{
                              
          delete obj.evns[act][fn.id];
                          }
          catch(e){
                              obj.evns.act[fn.id] 
          = null;
                          }
                          
          return;
                      }
                  }
              }
          };
          posted on 2010-01-14 01:17 jacklau 閱讀(224) 評論(1)  編輯  收藏

          FeedBack:
          # re: 一個事件綁定類,支持this 2010-01-14 12:55 treblam
          if(window.addEventListener) {


          else if(window.attachEvent) {

          }
          將標準的addEventlistener放在前面會好一點,不標準的則另外處理
          對于ie不用瀏覽器檢測直接用對象檢測的方式會更好。  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 吴桥县| 深圳市| 黑河市| 德格县| 海宁市| 泰顺县| 兴山县| 夏河县| 满城县| 凤台县| 广丰县| 柞水县| 巨鹿县| 桓仁| 手游| 迭部县| 隆回县| 通许县| 苏州市| 历史| 永清县| 西林县| 沿河| 百色市| 宜兰县| 光山县| 晋城| 嘉善县| 黔西县| 宝清县| 抚州市| 华容县| 山阳县| 抚顺市| 金阳县| 申扎县| 西宁市| 黔南| 萨迦县| 龙州县| 新野县|