最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript中傳統(tǒng)事件與現(xiàn)代事件

 更新時(shí)間:2015年06月23日 08:52:18   投稿:hebedich  
本文給大家介紹的是使用傳統(tǒng)事件的方法來模擬現(xiàn)代事件,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。

大家都知道,IE中的現(xiàn)代事件綁定(attachEvent)與W3C標(biāo)準(zhǔn)的(addEventListener)相比存在很多問題,

例如:內(nèi)存泄漏,重復(fù)添加事件并觸發(fā)的時(shí)候是倒敘執(zhí)行等。

下面是用傳統(tǒng)事件的方法來處理封裝事件的綁定:

addEvent.ID = 1;    // 事件計(jì)數(shù)器
  function addEvent(obj, type, fn){
    if(obj.addEventListener){
      obj.addEventListener(type, fn, false);
    } else {    // IE
      // 判斷對(duì)象是否存在,保證只有一個(gè)對(duì)象,否則每執(zhí)行一次,會(huì)創(chuàng)建一個(gè)事件對(duì)象
      // 以鍵值對(duì)的形式儲(chǔ)存類型與函數(shù)的一個(gè)數(shù)組,=======將事件對(duì)象數(shù)組掛載到obj對(duì)象是為

了方便事件的刪除
      if( !obj.events){
        // 相當(dāng)于結(jié)構(gòu)為:obj.events : {click:[fn1,fn2], mouserover:[fn1], ...}
        obj.events = {};
      }
      var flag = false;
      // 存儲(chǔ)事件對(duì)象
      if( !obj.events[type]){
        // 類型數(shù)據(jù)儲(chǔ)存挨個(gè)函數(shù)
        obj.events[type] = [];
        // 該類型的第一次事件類型及函數(shù)儲(chǔ)存到該類型數(shù)組中的第一位
        obj.events[type][0] = fn;
      } else {
        var eventfn = obj.events[type];
        // 循環(huán)遍歷該類型對(duì)象查詢?cè)撌录欠裰貜?fù),如果重復(fù)flag為true,并return返回
        for(var i in eventfn){
          if(eventfn[i] == fn ){
            flag = true;
            return;
          }
        }
        // 判斷該事件是否重復(fù),重復(fù)的話就不進(jìn)行事件的函數(shù)的存儲(chǔ),否則儲(chǔ)存該事件并執(zhí)行
        if( !flag ){
          // 當(dāng)該類型已經(jīng)存在了,將為該事件進(jìn)行累計(jì)時(shí)間類型函數(shù)存儲(chǔ),最后循環(huán)執(zhí)行
          eventfn[addEvent.ID++] = fn;
        }

      }

      // 事件函數(shù) 類型數(shù)組 函數(shù)遍歷調(diào)用
      obj["on"+type] = function(){
        var event = window.event;  // 事件對(duì)象的儲(chǔ)存

        // 在事件對(duì)象后添加函數(shù),當(dāng)執(zhí)行的時(shí)候調(diào)用,并阻止默認(rèn)行為的發(fā)生,與W3C標(biāo)準(zhǔn)同步
        event.preventDefault = function(){
          this.returnValue = false;
        };
        // 在事件對(duì)象后面添加函數(shù),一個(gè)尾巴函數(shù),停止冒泡。
        event.stopPropagation = function(){
          this.cancelBubble = true;
        };

        // 循環(huán)遍歷執(zhí)行類型儲(chǔ)存的多個(gè)函數(shù)
        var evfn = obj.events[type];
        for(var i in evfn){
          // 順序執(zhí)行該類型的事件函數(shù),解決了傳統(tǒng)事件的覆蓋問題和現(xiàn)代事件綁定的逆序觸發(fā)

事件的問題
          evfn[i].call(this, event);   // 將執(zhí)行函數(shù)放置在該對(duì)象的環(huán)境下執(zhí)行,并傳遞一個(gè)事件對(duì)

象給函數(shù)回調(diào)使用
        }
      }

    }
  }


  function removeEvent(obj, type, fn){
    if(obj.removeEventListener){
      obj.removeEventListener(type, fn, false);
    } else {
      // 循環(huán)遍歷該對(duì)象下該類型的事件函數(shù)是否函數(shù)該函數(shù),如果有就將該事件函數(shù)刪除
      var evefn = obj.events[type];
      for(var i in evefn){
        if(evefn[i] == fn){
          // delete evefn[i]; 該方法也可以刪除該數(shù)組的該項(xiàng),但是會(huì)保留該位置當(dāng)訪問的時(shí)候值

為undefined
          evefn.splice( i, 1); // 從第i的位置刪除1位,
        }
      }

    }
  }

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • JS數(shù)組中的splice()方法及用原生寫法分享

    JS數(shù)組中的splice()方法及用原生寫法分享

    這篇文章主要介紹了JS中數(shù)組的splice()方法,包括其用途、參數(shù)(起始位置、刪除元素個(gè)數(shù)、添加元素等)、不同參數(shù)情況的處理方式,還詳細(xì)講解了用原生JS手寫splice()方法的思路和代碼實(shí)現(xiàn)
    2024-11-11
  • JS實(shí)現(xiàn)的按鈕點(diǎn)擊顏色切換功能示例

    JS實(shí)現(xiàn)的按鈕點(diǎn)擊顏色切換功能示例

    這篇文章主要介紹了JS實(shí)現(xiàn)的按鈕點(diǎn)擊顏色切換功能,涉及js鼠標(biāo)事件響應(yīng)及頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • 理解javascript中Map代替循環(huán)

    理解javascript中Map代替循環(huán)

    這篇文章主要幫助大家理解javascript中Map代替循環(huán),感興趣的小伙伴們可以參考一下
    2016-02-02
  • js獲取標(biāo)簽元素data-*屬性值的4種方法

    js獲取標(biāo)簽元素data-*屬性值的4種方法

    這篇文章主要分享了js獲取標(biāo)簽元素data-*屬性值的4種方法,標(biāo)簽上有兩個(gè)屬性??data-id????和???data-user-name??,?需要通過js去獲取,下面文章具體介紹需要的小伙伴可以參考一下
    2022-06-06
  • javascript 偽數(shù)組實(shí)現(xiàn)方法

    javascript 偽數(shù)組實(shí)現(xiàn)方法

    能通過Array.prototype.slice轉(zhuǎn)換為真正的數(shù)組的帶有l(wèi)ength屬性的對(duì)象。
    2010-10-10
  • 自己實(shí)現(xiàn)ajax封裝示例分享

    自己實(shí)現(xiàn)ajax封裝示例分享

    這篇文章主要介紹了自己實(shí)現(xiàn)ajax封裝示例,需要的朋友可以參考下
    2014-04-04
  • JS基于遞歸實(shí)現(xiàn)倒計(jì)時(shí)效果的方法

    JS基于遞歸實(shí)現(xiàn)倒計(jì)時(shí)效果的方法

    這篇文章主要介紹了JS基于遞歸實(shí)現(xiàn)倒計(jì)時(shí)效果的方法,結(jié)合實(shí)例形式分析了javascript基于遞歸算法實(shí)現(xiàn)倒計(jì)時(shí)功能的相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11
  • Postman的下載及安裝教程詳解

    Postman的下載及安裝教程詳解

    這篇文章主要介紹了Postman的下載及安裝教程詳解,今天給大家介紹的這款網(wǎng)頁調(diào)試工具不僅可以調(diào)試簡(jiǎn)單的css、html、腳本等簡(jiǎn)單的網(wǎng)頁基本信息,它還可以發(fā)送幾乎所有類型的HTTP請(qǐng)求!需要的朋友可以參考下
    2018-10-10
  • js精準(zhǔn)計(jì)算

    js精準(zhǔn)計(jì)算

    這篇文章主要介紹了js精準(zhǔn)計(jì)算,對(duì)此感興趣的同學(xué),可以實(shí)驗(yàn)一下
    2021-04-04
  • 使用JavaScript開發(fā)IE瀏覽器本地插件實(shí)例

    使用JavaScript開發(fā)IE瀏覽器本地插件實(shí)例

    這篇文章主要介紹了使用JavaScript開發(fā)IE瀏覽器本地插件實(shí)例,本文講解使用JS+注冊(cè)表的方式開發(fā)一個(gè)IE瀏覽器本地插件,需要的朋友可以參考下
    2015-02-02

最新評(píng)論

德阳市| 扶余县| 闽清县| 牟定县| 偏关县| 阿城市| 固镇县| 丹寨县| 华亭县| 甘洛县| 合江县| 安溪县| 思南县| 高密市| 伊宁县| 威信县| 泰顺县| 普宁市| 榆树市| 修水县| 茶陵县| 左云县| 宁乡县| 贺州市| 中方县| 平阳县| 红河县| 湖州市| 泰州市| 加查县| 阜宁县| 汉沽区| 新化县| 五大连池市| 茂名市| 丰宁| 清水河县| 商河县| 枣庄市| 新巴尔虎右旗| 靖安县|