欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript常見事件源與事件流的獲取方法及解析

 更新時間:2023年05月22日 11:35:49   作者:前端蕭蕭  
這篇文章主要為大家介紹了JavaScript常見事件源與事件流的獲取方法及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

事件源

在事件中,當前操作的那個元素就是事件源。比如網(wǎng)頁元素中 input 有 onclick 事件,當點擊 input 發(fā)送 onclic 事件時,事件源就是 input。

常見事件源:

(鼠標) 事件描述
onclick鼠標單擊對象時觸發(fā)
ondblclick鼠標雙擊對象時觸發(fā)
onmousedown鼠標按鈕被按下時觸發(fā)
onmousemove鼠標被移動時觸發(fā)
onmouseout鼠標離開監(jiān)聽該事件的元素或子元素時觸發(fā)
onmouseover鼠標移動到監(jiān)聽該事件的元素或子元素時觸發(fā)
onmouseup鼠標松開時觸發(fā)
(鍵盤) 事件描述
onkeydown鍵盤按下
keypress鍵盤按住
keyup鍵盤松開
(表單控件) 事件描述
onblur失去焦點
onfocus獲取焦點
oninput輸入
onchange改變
onsubmit提交
onreset重置
(頁面) 事件描述
onload頁面加載結束
onscroll滾動
onresize改變大小

獲取事件源

事件源是作為event對象的屬性存在的。在W3C規(guī)范中,這個屬性是 target ;但是 IE8.0 及其以下版本不支持該屬性,它使用 srcElement 屬性來獲取事件源。

<html>
<head>
<title>獲取事件源</title>
</head>
<body>
<div id="demo">點擊這里</div>
<script type="text/javascript">
 document.getElementById("demo").onclick=function(e){
 var eve = e || window.event;
 var srcNode = eve.target || eve.srcElement; // 兼容所有瀏覽器
 alert(srcNode);
 }
</script>
</body>
</html>

事件流:

描述的是從頁面中接收事件的順序,也可以理解為事件的傳播順序。

DOM事件流存在的三個階段:

  • 事件捕獲階段
  • 處于目標階段
  • 事件冒泡階段

事件捕獲(event capturing):當鼠標點擊或者觸發(fā)dom事件時,瀏覽器會從根節(jié)點開始由外到內(nèi)進行事件傳播,即點擊了子元素,如果父元素通過事件捕獲方式注冊了對應的事件的話,會先觸發(fā)父元素綁定的事件。

事件冒泡(dubbed bubbling):與事件捕獲恰恰相反,事件冒泡順序是由內(nèi)到外進行事件傳播,直到根節(jié)點。

DOM標準事件流的觸發(fā)的先后順序為:先捕獲再冒泡,即當觸發(fā)dom事件時,會先進行事件捕獲,捕獲到事件源之后通過事件傳播進行事件冒泡。

不同的瀏覽器對此有著不同的實現(xiàn),IE10及以下不支持捕獲型事件,所以就少了一個事件捕獲階段,IE11、Chrome 、Firefox、Safari等瀏覽器則同時存在。

target 和 currentTarget

  • target是觸發(fā)事件的某個具體的對象,只會出現(xiàn)在事件機制的目標階段,即"誰觸發(fā)了事件,誰就是target"。
  • currentTarget是綁定了當前事件類型的對象,有可能是目標節(jié)點的祖先節(jié)點。

阻止事件在冒泡階段傳播

event.stopPropagation //阻止事件在冒泡階段傳播

<!-- 例子結構 -->
<div id="outer">
  <p id="inner"></p>
</div>
/**
 * 點擊#inner之后會發(fā)生如下過程:
 * outer捕獲階段
 * inner 一
 * inner 二
 * inner 三
 */
const inner = document.querySelector('#inner');
const outer = document.querySelector('#outer');
inner.addEventListener("click", event => {
  console.log("inner 一");
}, false);
inner.addEventListener("click", event => {
  console.log("inner 二");
  event.stopPropagation();
}, false);
inner.addEventListener("click",event => {
  console.log("inner 三");
}, false);
outer.addEventListener("click", event => {
  console.log("outer捕獲階段");
}, false);
outer.addEventListener("click", event => {
  console.log("outer冒泡階段");
}, false);

如果有多個相同類型事件的事件監(jiān)聽函數(shù)綁定到同一個元素,當該類型的事件觸發(fā)時,它們會按照被添加的順序執(zhí)行。如果其中某個監(jiān)聽函數(shù)執(zhí)行了event.stopImmediatePropagation()方法,則當前元素剩下的監(jiān)聽函數(shù)將不會被執(zhí)行,并且阻止事件在冒泡階段傳播。

/**
 * 點擊#inner之后會發(fā)生如下過程:
 * outer捕獲階段
 * inner 一
 * inner 二
 */
const inner = document.querySelector('#inner');
const outer = document.querySelector('#outer');
inner.addEventListener("click", (event) => {
  console.log("inner 一");
}, false);
inner.addEventListener("click", (event) => {
  console.log("inner 二");
  event.stopImmediatePropagation();
}, false);
inner.addEventListener("click",(event) => {
  console.log("inner 三");
}, false);
outer.addEventListener("click", event => {
  console.log("outer捕獲階段");
}, false);
outer.addEventListener("click", event => {
  console.log("outer冒泡階段");
}, false);

以上就是JavaScript常見事件源與事件流的獲取方法及解析的詳細內(nèi)容,更多關于JavaScript事件源事件流的資料請關注腳本之家其它相關文章!

相關文章

  • js function定義函數(shù)的幾種不錯方法

    js function定義函數(shù)的幾種不錯方法

    這篇文章主要介紹了js function定義函數(shù)的幾種方法,需要的朋友可以參考下
    2014-02-02
  • 實現(xiàn)圖片首尾平滑輪播(JS原生方法—節(jié)流)

    實現(xiàn)圖片首尾平滑輪播(JS原生方法—節(jié)流)

    下面小編就為大家?guī)硪黄獙崿F(xiàn)圖片首尾平滑輪播(JS原生方法—節(jié)流)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 基于JS實現(xiàn)bookstore靜態(tài)頁面的實例代碼

    基于JS實現(xiàn)bookstore靜態(tài)頁面的實例代碼

    本文給大家分享一段核心代碼基于js實現(xiàn)的bookstore靜態(tài)頁面,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-02-02
  • javascript實現(xiàn)狀態(tài)欄文字首尾相接循環(huán)滾動的方法

    javascript實現(xiàn)狀態(tài)欄文字首尾相接循環(huán)滾動的方法

    這篇文章主要介紹了javascript實現(xiàn)狀態(tài)欄文字首尾相接循環(huán)滾動的方法,實例分析了javascript定時函數(shù)及頁面元素屬性操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • javascript 星級評分效果(手寫)

    javascript 星級評分效果(手寫)

    今天上午抽空隨手寫了個星級評分的效果,給大家分享下。由于水平有限,如有問題請指出;首先要準備一張星星的圖片,灰色是默認狀態(tài),黃色是選擇狀態(tài),需要的朋友可以參考下
    2012-12-12
  • Javascript和Ajax中文亂碼吐血版解決方案

    Javascript和Ajax中文亂碼吐血版解決方案

    一般來說中文亂碼用js結合escape來解決,但下面的方法是一般后臺中的一些問題,需要注意下輸出順序,先聲明編碼類型在輸出內(nèi)容是個好習慣。
    2009-12-12
  • Bootstrap媒體對象的實現(xiàn)

    Bootstrap媒體對象的實現(xiàn)

    在web頁面中,圖片居左,內(nèi)容居右排列,是非常常見的效果,它也就是媒體對象,它是一種抽象的樣式,可以用來構建不同類型的組件。本文給大家介紹Bootstrap媒體對象的實現(xiàn),感興趣的朋友一起學習吧
    2016-05-05
  • 微信小程序 確認框的實現(xiàn)(附代碼)

    微信小程序 確認框的實現(xiàn)(附代碼)

    這篇文章主要介紹了微信小程序 確認框的實現(xiàn)(附代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • javascript實現(xiàn)完美拖拽效果

    javascript實現(xiàn)完美拖拽效果

    javascript實現(xiàn)的拖拽效果,可以把屏幕上的圖片拖動到任意地方,效果平滑,點擊圖片還可以從側邊展開圖片的詳細信息,非常好的相冊效果
    2015-05-05
  • JS基于VUE組件實現(xiàn)城市列表效果

    JS基于VUE組件實現(xiàn)城市列表效果

    這篇文章主要為大家詳細介紹了JS基于VUE組件實現(xiàn)城市列表效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論