国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

詳解JS事件 - 事件模型/事件流/事件代理/事件對象/自定義事件

URLOS / 3520人閱讀

摘要:取消事件的默認行為。阻止事件的派發(fā)包括了捕獲和冒泡阻止同一個事件的其他監(jiān)聽函數(shù)被調(diào)用。

事件模型

DOM0 級事件模型 -沒有事件流,這種方式兼容所有瀏覽器

// 方式一  將事件直接通過屬性綁定在元素上

/ 方式二 獲取到頁面元素后,通過 onclick 等事件,將觸發(fā)的方法指定為元素的事件
var btn = document.getElementById("btn")
btn.onclick = function () {...}
btn.onclick = null

IE 事件模型 - 只有冒牌,僅在 IE 瀏覽器中有效,不兼容其他瀏覽器

事件處理階段:事件在達到目標元素時,觸發(fā)監(jiān)聽事件

事件冒泡階段:事件從目標元素冒泡到 document,并且一次檢查各個節(jié)點是否綁定了監(jiān)聽函數(shù),如果有則執(zhí)行

// 綁定事件
el.attachEvent(eventType, handler)
// 移除事件
el.detachEvent(eventType, handler)

DOM2 級事件模型 - W3C標準模型,除 IE6-8 以外的所有現(xiàn)代瀏覽器都支持該事件模型

事件捕獲階段:事件從 document 向下傳播到目標元素,依次檢查所有節(jié)點是否綁定了監(jiān)聽事件,如果有則執(zhí)行 - 從外向內(nèi),把這個坐標轉(zhuǎn)換為具體的元素上事件的過程,就是捕獲過程(點擊事件來自觸摸屏或者鼠標,鼠標點擊并沒有位置信息,但是一般操作系統(tǒng)會根據(jù)位移的累積計算出來,跟觸摸屏一樣,提供坐標給瀏覽器)

事件處理階段:事件在達到目標元素時,觸發(fā)監(jiān)聽事件

事件冒泡階段:事件從目標元素冒泡到 document,并且一次檢查各個節(jié)點是否綁定了監(jiān)聽函數(shù),如果有則執(zhí)行 - 從內(nèi)向外,是人類處理事件的邏輯

// 綁定事件
target.addEventListener(type, listener[, useCapture]);
// 移除事件
target.addEventListener(type, listener[, useCapture]);

事件流:

瀏覽器事件流向捕獲階段、目標階段、冒泡階段,就是我們所說的- W3C事件模型

兼容的事件綁定寫法

function bindEvent(obj, type, fn) {
    if (obj.addEventListener) {
      obj.addEventListener(type, eventFn);
    } else {
      obj.attachEvent("on" + type, eventFn);
    }
    function eventFn(ev) {
      var ev = ev || window.event;
      var target = ev.target || ev.srcElement;
      fn && fn(target, ev)
    }
  }

事件代理

定義:指利用“事件冒泡”,只通過指定一個事件處理程序,來管理某一類型的所有事件

優(yōu)點:

(1)可以大量節(jié)省內(nèi)存占用,減少事件注冊,比如在table上代理所有td的click事件就非常棒

(2)可以實現(xiàn)當新增子對象時無需再次對其綁定事件,對于動態(tài)內(nèi)容部分尤為合適

缺點:僅限于上述需求下,如果把所有事件都用代理就可能會出現(xiàn)事件誤判,即本不應(yīng)用觸發(fā)事件的被綁上了事件

demo: 把動態(tài)列表的點擊事件,綁定在父元素上

事件對象Event

元素進行事件監(jiān)聽的時候,它的回調(diào)函數(shù)里就會默認傳遞一個參數(shù) event,它是一個對象

屬性:

event.target:指的是觸發(fā)事件的那個節(jié)點,也就是事件最初發(fā)生的節(jié)點(fn觸發(fā)的元素)

event.currentTarget:指的是正在執(zhí)行的監(jiān)聽函數(shù)的那個節(jié)點(fn綁定的元素)

event.isTrusted:表示事件是否是真實用戶觸發(fā)。

event.preventDefault():取消事件的默認行為。

event.stopPropagation():阻止事件的派發(fā)(包括了捕獲和冒泡)

event.stopImmediatePropagation():阻止同一個事件的其他監(jiān)聽函數(shù)被調(diào)用。

target和currentTarget區(qū)別:觸發(fā)事件的元素和事件綁定的元素

stopPropagation和stopImmediatePropagation區(qū)別:

stopPropagation只對書寫的那個事件有用,再綁定另一個click失效

stopImmediatePropagation對綁定的很多類型的事件都有用

兼容寫法: ev.target || ev.srcElement

addEventListener(W3C)

參數(shù):

事件名稱 event

事件處理函數(shù)/具有 handleEvent函數(shù)的對象 listener

第三個參數(shù)

once:只執(zhí)行一次

passive:承諾此事件監(jiān)聽不會調(diào)用 preventDefault,這有助于性能

useCapture:是否捕獲true(否則冒泡false)

移除:removeEventListener(事件名稱、事件回調(diào)、捕獲/冒泡)

自定義事件:

只能在DOM元素上自定義事件

//使用 Event 構(gòu)造器來創(chuàng)造了一個新的事件
var evt = new Event("look", {"bubbles":true, "cancelable":false});
document.dispatchEvent(evt);
面試題

了解js的事件嗎?

說說js的事件/綁定事件的方法?/了解事件流嗎?

事件流的順序是什么?

補充

React組件中怎么做事件代理

React組件事件代理的原理

React的事件合成機制好像和js的不太一樣 (綁定一個事件到一個組件上)

Emit事件怎么發(fā),需要引入什么

頁面上生成一萬個button,并且綁定事件,如何做(JS原生操作DOM)

添加原生事件不移除為什么會內(nèi)存泄露

vue 中的 native 修飾符

移動端點擊穿透:fastclick

手寫原生js實現(xiàn)事件代理,并要求兼容瀏覽器

事件如何派發(fā)也就是事件廣播(dispatchEvent

總結(jié):https://www.cnblogs.com/dfyg-...

手寫一個冒泡排序處理事務(wù)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103828.html

相關(guān)文章

  • 前端面試(知識點)整理(一)

    摘要:接受個參數(shù)事件類型,是否冒泡,是否阻止瀏覽器的默認行為觸發(fā)上綁定的自定義事件觸發(fā)元素上綁定事件事件的委托代理的原理以及優(yōu)缺點。委托代理事件是那些被綁定到父級元素的事件,但是只有當滿足一定匹配條件時才會被挪。 一、頁面布局 1.問題:假設(shè)高度已知,請寫出三欄布局 ,其中左欄、右欄寬度各為300px,中間自適應(yīng)。 解決方案一:使用浮動布局` Document ...

    zhichangterry 評論0 收藏0
  • 前端面試(知識點)整理(一)

    摘要:接受個參數(shù)事件類型,是否冒泡,是否阻止瀏覽器的默認行為觸發(fā)上綁定的自定義事件觸發(fā)元素上綁定事件事件的委托代理的原理以及優(yōu)缺點。委托代理事件是那些被綁定到父級元素的事件,但是只有當滿足一定匹配條件時才會被挪。 一、頁面布局 1.問題:假設(shè)高度已知,請寫出三欄布局 ,其中左欄、右欄寬度各為300px,中間自適應(yīng)。 解決方案一:使用浮動布局` Document ...

    Songlcy 評論0 收藏0
  • 前端面試(知識點)整理(一)

    摘要:接受個參數(shù)事件類型,是否冒泡,是否阻止瀏覽器的默認行為觸發(fā)上綁定的自定義事件觸發(fā)元素上綁定事件事件的委托代理的原理以及優(yōu)缺點。委托代理事件是那些被綁定到父級元素的事件,但是只有當滿足一定匹配條件時才會被挪。 一、頁面布局 1.問題:假設(shè)高度已知,請寫出三欄布局 ,其中左欄、右欄寬度各為300px,中間自適應(yīng)。 解決方案一:使用浮動布局` Document ...

    ThreeWords 評論0 收藏0
  • js 事件筆記

    摘要:只能寫成在捕獲階段監(jiān)聽這個事件。默認為,表示事件是否可以被取消只有為的時候,才能用取消這個事件。阻止默認事件結(jié)果結(jié)果和在事件處理程序內(nèi)部,始終等同于,為綁定事件的元素,而是為觸發(fā)事件的實際目標。 一、事件簡述 1、事件概念 在Web中, 事件在瀏覽器窗口中被觸發(fā),執(zhí)行事先綁定的事件處理器(也就是事件觸發(fā)時會運行的代碼塊),對事件做出響應(yīng)。用戶在瀏覽器的任何一個操作都會去觸發(fā)一個事件,J...

    Barry_Ng 評論0 收藏0
  • DOM事件機制

    摘要:而事件分為個級別級事件處理,級事件處理和級事件處理。一個事件發(fā)生后,會在子元素和父元素之間傳播。也就是說,始終是監(jiān)聽事件者,而是事件的真正發(fā)出者。五參考文章級別與事件事件機制解惑事件模型事件委托詳解事件的學與記和和的區(qū)別 前言 本文主要介紹DOM事件級別、DOM事件模型、事件流、事件代理和Event對象常見的應(yīng)用,希望對你們有些幫助和啟發(fā)! 本文首發(fā)地址為GitHub博客,寫文章不易,...

    laznrbfe 評論0 收藏0

發(fā)表評論

0條評論

URLOS

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<