成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

詳解JavaScript 事件流

瀏覽:126日期:2023-10-16 15:52:24

事件

HTML中與javascript交互是通過事件驅動來實現的,例如鼠標點擊事件、頁面的滾動事件onscroll等等,可以向文檔或者文檔中的元素添加事件偵聽器來預訂事件。想要知道這些事件是在什么時候進行調用的,就需要了解一下“事件流”的概念。

事件流

事件流描述的就是從頁面中接收事件的順序。而早期的IE和Netscape提出了完全相反的事件流概念,IE事件流是事件冒泡,而Netscape的事件流就是事件捕獲。

事件流類別

事件冒泡

即從下至上,從目標觸發的元素逐級向上傳播,直到window對象。

詳解JavaScript 事件流

事件捕獲

即從上至下,從document逐級向下傳播到目標元素。

詳解JavaScript 事件流

后來ECMAScript在DOM2中對事件流進行了進一步規范,基本上就是上述二者的結合。

DOM2級事件規定的事件流包括三個階段:

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

注意⚠️:先捕獲后冒泡,但是在目標節點上誰寫在前面誰先執行。但是在目標元素上不區分冒泡還是捕獲,按綁定的順序來執行。

詳解JavaScript 事件流

DOM事件級別

分為四個級別

詳解JavaScript 事件流

DOM0:不是W3C規范。

DOM1:開始是W3C規范。專注于HTML文檔和XML文檔。

DOM2:對DOM1增加了樣式表對象模型

DOM3:對DOM2增加了內容模型 (DTD 、Schemas) 和文檔驗證。

DOM0級

DOM0級事件具有極好的跨瀏覽器優勢,會以最快的速度綁定。綁定方式有如下兩種

行內綁定(內聯模型)

將函數名直接作為html標簽中屬性的屬性值。

<div onclick='btnClick()'>按鈕</div><script>function btnClick(){ console.log('hello');}</script>

動態綁定(腳本模型)

通過在JS中選中某個節點,然后給節點添加onclick屬性

<div id='btn'>按鈕</div><script>var btn = document.getElementById('btn');btn.onclick = function(){ console.log('點擊');}</script>

注意⚠️

DOM0級同一個節點只能添加一次同類型事件,后添加的同類型事件會覆蓋前面的事件 DOM0級只支持冒泡

DOM1級

其中DOM1級事件處理標準中并沒有定義事件相關的內容,所以沒有所謂的DOM1事件處理

DOM2級

DOM2級定義了兩個事件處理程序。(觀察者模式)

addEventListener() ---添加事件偵聽器 removeEventListener() ---刪除事件偵聽器

函數均有3個參數, 第一個參數是要處理的事件名 第二個參數是作為事件處理程序的函數 第三個參數是一個boolean值,默認false表示使用冒泡機制,true表示捕獲機制。

<div id='btn'>按鈕</div><script>var btn=document.getElementById('btn');btn.addEventListener('click',hello,false);btn.addEventListener('click',helloagain,false);function hello(){ console.log('hello');}function helloagain(){ console.log('hello again');}</script>// 點擊后結果: // hello// hello again

注意⚠️

如果定義了一模一樣的監聽方法時,是會發生覆蓋的。

<div id='btn'>點擊</div><script>var btn=document.getElementById('btn');btn.addEventListener('click',hello,false);btn.addEventListener('click',hello,false);function hello(){ console.log('hello');}</script>// 點擊后結果: // hello

DOM3級

對DOM2增加了內容模型 (DTD 、Schemas) 和文檔驗證。定義了一些新的事件,比如鍵盤事件,還可以自定義事件。

自定義事件

自定義事件不是由DOM原生觸發的,它的目的是讓開發人員創建自己的事件。要創建的自定義事件可以由createEvent('CustomEvent'); 返回的對象有一個initCustomEvent()方法接收如下四個參數。

type:字符串,觸發的事件類型,自定義。例如 “keyDown”,“selectedChange”; bubble(布爾值):標示事件是否應該冒泡; cancelable(布爾值):標示事件是否可以取消; detail(對象):任意值,保存在event對象的detail屬性中;

可以像分配其他事件一樣在DOM中分派創建的自定義事件對象。如:

var div = document.getElementById('myDiv');EventUtil.addEventHandler(div,'myEvent', function () { alert('div myEvent!');});EventUtil.addEventHandler(document,'myEvent',function(){ alert('document myEvent!');});if(document.implementation.hasFeature('CustomEvents','3.0')){ var e = document.createEvent('CustomEvent'); e.initCustomEvent('myEvent',true,false,'hello world!'); div.dispatchEvent(e);}

這個例子中創建了一個冒泡事件“myEvent”。而event.detail的值被設置成了一個簡單的字符串,然后在div和document上偵聽該事件,因為在initCustomEvent中設置了事件冒泡。所以當div激發該事件時,瀏覽器會將該事件冒泡到document。

阻止冒泡

stopPropagation函數

btn.addEventListener(’click’,function(ev){ ev.stopPropagation(); console.log(’阻止冒泡’)}, false)

事件委托(事件代理)

原理

如果有多個DOM節點需要監聽事件的情況下,給每個DOM綁定監聽函數,會極大的影響頁面的性能,因為我們通過事件委托來進行優化,事件委托利用的就是冒泡的原理。

<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li></ul><script> var li_list = document.getElementsByTagName(’li’) for(let index = 0;index<li_list.length;index++){ li_list[index].addEventListener(’click’, function(ev){ console.log(ev.currentTarget.innerHTML) }) }</script>

正常情況我們給每一個li都會綁定一個事件,但是如果這時候li是動態渲染的,數據又特別大的時候,每次渲染后(有新增的情況)我們還需要重新來綁定,又繁瑣又耗性能;這時候我們可以將綁定事件委托到li的父級元素,即ul。

var ul_dom = document.getElementsByTagName(’ul’)ul_dom[0].addEventListener(’click’, function(ev){ console.log(ev.target.innerHTML)})

target和currentTarget區別:

target返回觸發事件的元素,不一定是綁定事件的元素 currentTarget返回的是綁定事件的元素

優點

提高性能: 每一個函數都會占用內存空間,只需添加一個事件處理程序代理所有事件,所占用的內存空間更少。 動態監聽: 使用事件委托可以自動綁定動態添加的元素,即新增的節點不需要主動添加也可以一樣具有和其他元素一樣的事件。

以上就是詳解JavaScript 事件流的詳細內容,更多關于JavaScript 事件流的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品久久毛片a| 国产精品免费视频观看| 91麻豆精品国产自产在线| 国产精品久久影院| 国产寡妇亲子伦一区二区| 亚洲一区二区成人| 国产偷国产偷亚洲高清人白洁| 亚洲成人免费av| 欧美精品99| 欧美一区二区日韩| 亚洲v日本v欧美v久久精品| 91免费版pro下载短视频| 欧美色综合影院| 亚洲尤物视频在线| 色综合网站在线| 一本到不卡免费一区二区| 国产精品日韩成人| bt7086福利一区国产| 欧洲精品一区二区| 亚洲一本大道在线| 欧美粗暴jizz性欧美20| 欧美精品丝袜中出| 一区二区在线观看不卡| 不卡av电影在线播放| 欧美性受xxxx黑人xyx| 亚洲曰韩产成在线| 亚洲经典在线| 日本一区二区视频在线| 白白色亚洲国产精品| 欧美日韩精品欧美日韩精品一 | 国模一区二区三区白浆| 性娇小13――14欧美| 中文av字幕一区| 成人免费视频app| 欧美高清一级片在线| 亚洲第一av色| 国产综合色产| 久久精品视频在线看| 国产成人av福利| 欧美色图12p| 青青草国产精品亚洲专区无| 国产精品久久亚洲7777| 成人免费一区二区三区视频| 色综合久久综合网欧美综合网| 56国语精品自产拍在线观看| 亚洲国产人成综合网站| 在线成人www免费观看视频| 久久久噜噜噜久久中文字幕色伊伊| 国产成人免费视频精品含羞草妖精| 欧美精品aⅴ在线视频| 久久er精品视频| 色呦呦国产精品| 亚洲国产精品欧美一二99| 亚洲裸体俱乐部裸体舞表演av| 国产精品全国免费观看高清| 国产精品v欧美精品v日本精品动漫| 国产调教视频一区| 女主播福利一区| 日本一区二区视频在线| 91欧美一区二区| 精品sm在线观看| 91在线视频播放| 国产欧美一区二区三区在线看蜜臀 | 国产一区在线观看麻豆| 欧美综合天天夜夜久久| 日韩国产精品大片| 色婷婷久久99综合精品jk白丝| 日韩和欧美的一区| 91国在线观看| 久久精品国产**网站演员| 欧美影院午夜播放| 激情国产一区二区| 91精品国产综合久久久久久漫画| 国模套图日韩精品一区二区| 91精品国产麻豆| 成人精品一区二区三区中文字幕 | 国产乱码精品| 亚洲伊人色欲综合网| 国产视频一区在线观看一区免费| 亚洲欧美激情一区二区| 一区二区三区成人精品| 亚洲地区一二三色| 色婷婷av一区二区三区大白胸| 老司机精品视频线观看86| 欧美精选一区二区| www.欧美亚洲| 中文字幕av一区二区三区免费看| 国产真实久久| 亚洲国产综合在线| 在线欧美三区| 五月激情丁香一区二区三区| 在线国产亚洲欧美| 国产精品主播直播| xnxx国产精品| 国产精品hd| 天堂一区二区在线| 欧美巨大另类极品videosbest | 日韩中文字幕区一区有砖一区| 精品视频在线看| 成人性视频免费网站| 欧美精品一区二区精品网| 国自产拍偷拍福利精品免费一| 亚洲精品成人在线| 欧美三级日韩三级国产三级| av激情综合网| 伊人性伊人情综合网| 欧美色图激情小说| 97久久精品人人澡人人爽| 亚洲精品成人悠悠色影视| 欧美日韩免费视频| 91麻豆高清视频| 亚洲欧美国产三级| 色一区在线观看| 国产成人aaa| 国产精品色呦呦| 久久精品一区二区国产| 岛国av在线一区| 亚洲精品少妇30p| 欧美日韩一区精品| 成人综合婷婷国产精品久久蜜臀| 国产精品久久久久久久岛一牛影视 | 9191久久久久久久久久久| 欧美不卡在线| 亚洲亚洲精品在线观看| 91麻豆精品国产自产在线 | 精品一区精品二区高清| 中文字幕在线一区| 欧美成人午夜电影| 色丁香久综合在线久综合在线观看| 色综合色狠狠综合色| 精品一区二区三区香蕉蜜桃| 国产精品久久久久久户外露出 | 久久精品欧美日韩| 欧美日韩国产高清一区二区三区 | 欧美日本中文| 欧美日韩综合不卡| 亚洲精品字幕| 欧美一区二区三区在线播放| 国产精品123区| 日韩一区二区三区视频| 99久久er热在这里只有精品66| 爽好久久久欧美精品| 久久久午夜精品| 在线精品视频一区二区| 91首页免费视频| 日本怡春院一区二区| 国产精品午夜在线| 欧美日韩高清一区| 在线观看一区| 成人午夜在线播放| 日韩综合一区二区| 亚洲午夜精品福利| 国产精品中文字幕一区二区三区| 亚洲精品视频免费观看| 免费在线国产精品| 国产亚洲二区| 欧美日韩成人一区二区三区| 日韩久久久久久| 欧美日韩免费视频| 久久久精品动漫| 国产欧美精品| 亚洲高清资源| 午夜精品亚洲| 女女同性精品视频| 欧美jjzz| 91猫先生在线| 99久久精品情趣| 成人激情校园春色| 国产黄人亚洲片| 国产尤物一区二区在线| 精品无人区卡一卡二卡三乱码免费卡| 婷婷夜色潮精品综合在线| 亚洲午夜激情网站| 亚洲欧美区自拍先锋| 中文字幕一区二区三区在线不卡| 久久精品这里都是精品| 久久夜色精品一区| 精品黑人一区二区三区久久| 日韩亚洲欧美综合| 日韩一级高清毛片| 欧美一区二区在线观看| 日韩午夜中文字幕| 日韩精品一区二区三区中文精品| 欧美成人精品3d动漫h| 日韩视频在线你懂得| 正在播放一区二区| 日韩欧美成人激情| 欧美mv日韩mv国产网站app| 精品久久五月天| 精品国产百合女同互慰| 久久久精品国产免费观看同学| 欧美成人伊人久久综合网| 久久午夜老司机| 亚洲国产精品高清| 亚洲桃色在线一区| 亚洲第一久久影院| 老司机午夜精品| 成人小视频免费在线观看| 91啪亚洲精品| 亚洲黑丝一区二区|