<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理
    ??? 在W3C新的事件模型框架中,IE和Mozilla都實(shí)現(xiàn)了相應(yīng)的版本,IE的是attachEvent和detachEvent來實(shí)現(xiàn)元素事件的添加和刪除,而Mozilla則是標(biāo)準(zhǔn)的addEventListener和 removeEventListener。在傳統(tǒng)的javascript事件模型中,我們沒辦法為一個(gè)頁面元素注冊(cè)多個(gè)事件,只有靠自己來實(shí)現(xiàn)觀察者模式。代碼來自《ajax in action》,我添加了注釋
    //命名空間
    var?jsEvent?=?new?Array();

    //構(gòu)造函數(shù)
    jsEvent.EventRouter?=?function(el,eventType){
    ?
    //內(nèi)部維護(hù)一個(gè)事件列表
    ?this.lsnrs?=?new?Array();
    ?
    this.el?=?el;
    ?el.eventRouter?
    =?this;
    ?
    //注冊(cè)回調(diào)函數(shù)
    ?el[eventType]?=?jsEvent.EventRouter.callback;
    };

    //添加事件
    jsEvent.EventRouter.prototype.addListener?=?function(lsnr){
    ?
    this.lsnrs.append(lsnr,true);?
    }?;

    //移除事件
    jsEvent.EventRouter.prototype.removeListener=
    function(lsnr){?
    this.lsnrs.remove(lsnr);?
    };?

    //通知所有事件
    jsEvent.EventRouter.prototype.notify?=?function(e){
    ?
    var?lsnrs?=?this.lsnrs;
    ?
    for(var?i=0;i<lsnrs.length;i++){
    ??
    var?lsnr?=?lsnrs[i];
    ??lsnr.call(
    this,e);
    ?}
    };
    //回調(diào)函數(shù)調(diào)用notify
    jsEvent.EventRouter.callback=function(event){
    ?
    var?e?=?event?||?window.event;
    ?
    var?router?=?this.eventRouter;
    ?router.notify(e);
    };

    Array.prototype.append?
    =?function(obj,nodup){
    ?
    if(nodup){?
    ??
    this[this.length]=obj;
    ?}
    };
    Array.prototype.remove?
    =?function(o)
    {
    ???
    var?i?=?this.indexOf(o);
    ???
    if?(i>-1)
    ??{
    ????
    this.splice(i,1);
    ???}
    ?????
    return?(i>-1);
    ???}??
    };?

    這里比較巧妙的就是
    ?el.eventRouter?=?this;
    //注冊(cè)回調(diào)函數(shù)
    ?el[eventType]?=?jsEvent.EventRouter.callback;

    首先給el元素添加屬性
    eventRouter是當(dāng)前的EventRouter對(duì)象,然后,比如eventType假設(shè)為onclick,el是一個(gè)button元素,那么這里就是el[onclick]=jsEvent.EventRouter.callback;相當(dāng)于el.onclick=jsEvent.EventRouter.callback;
    而請(qǐng)注意這個(gè)回調(diào)函數(shù)
    callback將首先得到元素的eventRouter對(duì)象,再調(diào)用此對(duì)象的notify方法觸發(fā)所有注冊(cè)的事件。

    再請(qǐng)注意notify函數(shù)里面這一行:
    ?lsnr.call(this,e);

    我們把event對(duì)象傳入此函數(shù)作參,而
    var?e?=?event?||?window.event;那么所有事件函數(shù)的第一個(gè)參數(shù)都將是event對(duì)象,避免了IE需要通過window.event得到的事件對(duì)象的瀏覽器不一致行為。

    使用此對(duì)象方式:
     var?mat=document.getElementById('mousemat');
      cursor
    =document.getElementById('cursor');
      
    var?mouseRouter=new?jsEvent.EventRouter(mat,"onmousemove");
      mouseRouter.addListener(writeStatus);
      mouseRouter.addListener(drawThumbnail);?


    主站蜘蛛池模板: 456亚洲人成影院在线观| 亚洲国产精品成人综合色在线婷婷| 全免费A级毛片免费看网站| 无码一区二区三区免费视频| 美女被免费视频网站a国产| 亚洲大成色www永久网址| h在线看免费视频网站男男| 三年片在线观看免费观看大全动漫| eeuss影院www天堂免费| 亚洲精品一级无码鲁丝片| 亚洲视频免费播放| 黄网站在线播放视频免费观看| 国产在线一区二区综合免费视频| 在线中文高清资源免费观看| 亚洲av不卡一区二区三区| 亚洲丰满熟女一区二区哦| 久久免费观看国产精品88av| 国产jizzjizz视频免费看| 亚洲高清免费在线观看| 69av免费视频| 国产亚洲色视频在线| 亚洲综合校园春色| 国产免费观看黄AV片| 国产精品99爱免费视频| 亚洲尹人九九大色香蕉网站| 日本道免费精品一区二区| 亚洲?V无码乱码国产精品 | 在线观看亚洲免费视频| 666精品国产精品亚洲| 无码免费午夜福利片在线 | 美女免费视频一区二区| 亚洲精品无码不卡在线播放HE | 精品无码一级毛片免费视频观看 | 免费国产美女爽到喷出水来视频| 欧洲亚洲国产清在高| www永久免费视频| 四虎永久成人免费| 日韩精品免费在线视频| 久久久久久亚洲精品影院| 久久精品国产亚洲Aⅴ蜜臀色欲| 24小时日本韩国高清免费|