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

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

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

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理
    ??? 在W3C新的事件模型框架中,IE和Mozilla都實(shí)現(xiàn)了相應(yīng)的版本,IE的是attachEvent和detachEvent來(lái)實(shí)現(xiàn)元素事件的添加和刪除,而Mozilla則是標(biāo)準(zhǔn)的addEventListener和 removeEventListener。在傳統(tǒng)的javascript事件模型中,我們沒(méi)辦法為一個(gè)頁(yè)面元素注冊(cè)多個(gè)事件,只有靠自己來(lái)實(shí)現(xiàn)觀察者模式。代碼來(lái)自《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需要通過(guò)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);?


    主站蜘蛛池模板: 国产亚洲真人做受在线观看| 亚洲人成综合网站7777香蕉| 8888四色奇米在线观看免费看| 亚洲国产精品专区| 国产一区二区三区免费在线观看| 乱淫片免费影院观看| 91亚洲国产成人久久精品网站| 在线免费观看中文字幕| 皇色在线免费视频| 亚洲综合一区国产精品| 国产亚洲精久久久久久无码77777| 18禁止看的免费污网站| 深夜a级毛片免费无码| 亚洲国产一区国产亚洲| 国产真实伦在线视频免费观看| 99久久婷婷免费国产综合精品| 亚洲乱亚洲乱妇无码| 久久精品亚洲中文字幕无码网站| 大学生a级毛片免费观看| 成人无码a级毛片免费| 亚洲精华国产精华精华液网站| 亚洲国产成人久久综合碰碰动漫3d| 日本无吗免费一二区| 69精品免费视频| 国产A∨免费精品视频| 亚洲人成人伊人成综合网无码| 西西人体44rt高清亚洲| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产精品国产亚洲精品看不卡| 免费看香港一级毛片| 在线成人爽a毛片免费软件| 一级做a爱过程免费视| 国产亚洲中文日本不卡二区| 老司机亚洲精品影院| 精品亚洲综合在线第一区| 国产在线ts人妖免费视频| 五月婷婷综合免费| 曰批全过程免费视频网址| 国产永久免费高清在线| 国产成人1024精品免费| 免费亚洲视频在线观看|