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

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

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

事件源

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

常見事件源:

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

獲取事件源

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

<html>
<head>
<title>獲取事件源</title>
</head>
<body>
<div id="demo">點(diǎn)擊這里</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>

事件流:

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

DOM事件流存在的三個(gè)階段:

  • 事件捕獲階段
  • 處于目標(biāo)階段
  • 事件冒泡階段

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

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

DOM標(biāo)準(zhǔn)事件流的觸發(fā)的先后順序?yàn)椋合炔东@再冒泡,即當(dāng)觸發(fā)dom事件時(shí),會(huì)先進(jìn)行事件捕獲,捕獲到事件源之后通過事件傳播進(jìn)行事件冒泡。

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

target 和 currentTarget

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

阻止事件在冒泡階段傳播

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

<!-- 例子結(jié)構(gòu) -->
<div id="outer">
  <p id="inner"></p>
</div>
/**
 * 點(diǎn)擊#inner之后會(huì)發(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);

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

/**
 * 點(diǎn)擊#inner之后會(huì)發(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常見事件源與事件流的獲取方法及解析的詳細(xì)內(nèi)容,更多關(guān)于JavaScript事件源事件流的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Layui數(shù)據(jù)表格判斷編輯輸入的值,是否為我需要的類型詳解

    Layui數(shù)據(jù)表格判斷編輯輸入的值,是否為我需要的類型詳解

    今天小編就為大家分享一篇Layui數(shù)據(jù)表格判斷編輯輸入的值,是否為我需要的類型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 分析JavaScript數(shù)組操作難點(diǎn)

    分析JavaScript數(shù)組操作難點(diǎn)

    本篇文章通過例舉代碼分析的方式給大家講解了JavaScript數(shù)組操作難點(diǎn)以及需要注意的地方,一起學(xué)習(xí)參考下吧。
    2017-12-12
  • 一道超經(jīng)典js面試題Foo.getName()的故事

    一道超經(jīng)典js面試題Foo.getName()的故事

    Foo.getName算是一道比較老的面試題了,大致百度了一下在17年就有相關(guān)文章在介紹它,下面這篇文章主要給大家介紹了關(guān)于一道超經(jīng)典js面試題Foo.getName()的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 使用JS代碼實(shí)現(xiàn)頁(yè)面添加水印的方法詳解

    使用JS代碼實(shí)現(xiàn)頁(yè)面添加水印的方法詳解

    這篇文章主要介紹了使用80 行 JS 代碼實(shí)現(xiàn)頁(yè)面添加水?。何淖炙 ⒍嘈形淖炙?、圖片水印、文字&圖片水印,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-05-05
  • 一些超實(shí)用的JS常用算法詳解(推薦!)

    一些超實(shí)用的JS常用算法詳解(推薦!)

    算法是計(jì)算機(jī)算法即計(jì)算機(jī)能夠執(zhí)行的算法,只有明確了算法后,才能使應(yīng)用程序?qū)崿F(xiàn)某些功能,所以通常人們會(huì)將算法稱為程序的靈魂,下面這篇文章主要給大家分享介紹了一些超實(shí)用的JS常用算法的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • JS未跨域操作iframe里的DOM

    JS未跨域操作iframe里的DOM

    這篇文章主要介紹了JS未跨域操作iframe里的DOM 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • Yii2使用Bootbox插件實(shí)現(xiàn)自定義彈窗

    Yii2使用Bootbox插件實(shí)現(xiàn)自定義彈窗

    Bootbox.js 是一個(gè)小型的 JavaScript 庫(kù)用來創(chuàng)建簡(jiǎn)單的可編程對(duì)話框,基于 Twitter 的 Bootstrap 開發(fā)。今天我們就來研究下,如何使用bootbox插件來實(shí)現(xiàn)自定義彈窗。
    2015-04-04
  • 小程序?qū)崿F(xiàn)簡(jiǎn)單分頁(yè)組件

    小程序?qū)崿F(xiàn)簡(jiǎn)單分頁(yè)組件

    這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)簡(jiǎn)單分頁(yè)組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Bootstrap警告(Alerts)的實(shí)現(xiàn)方法

    Bootstrap警告(Alerts)的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Bootstrap警告(Alerts)的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解JavaScript模塊化開發(fā)

    詳解JavaScript模塊化開發(fā)

    一個(gè)模塊就是實(shí)現(xiàn)特定功能的文件,有了模塊,我們就可以更方便地使用別人的代碼,想要什么功能,就加載什么模塊。模塊開發(fā)需要遵循一定的規(guī)范,否則就都亂套了
    2016-12-12

最新評(píng)論

宽甸| 邹城市| 资兴市| 防城港市| 阿巴嘎旗| 乌鲁木齐市| 平遥县| 宁蒗| 资源县| 循化| 山西省| 洞口县| 拜城县| 宝清县| 保靖县| 宜春市| 肥东县| 手机| 牙克石市| 长兴县| 无锡市| 米易县| 临朐县| 桑植县| 防城港市| 桃园县| 福建省| 剑阁县| 邻水| 广德县| 观塘区| 孟村| 天台县| 双辽市| 江北区| 新余市| 安新县| 华宁县| 延边| 奎屯市| 滦平县|