摘要:響應(yīng)某個事件的函數(shù)就叫事件處理程序或事件偵聽器。為事件指定事件處理程序的方法主要有種。事件處理程序事件直接加在元素上。事件委托利用冒泡的原理,把事件加到父元素或祖先元素上,觸發(fā)執(zhí)行效果,解決事件處理程序過多問題。事件委托優(yōu)點(diǎn)提高性能。
JavaScript簡單入門可以看看我丑丑的Github博客JavaScript簡單入門
事件JavaScript與HTML之間的交互是通過事件實(shí)現(xiàn)的。事件是文檔或者瀏覽器窗口中發(fā)生的,特定的交互瞬間。
事件流事件流描述的是從頁面中接收事件的順序。
事件傳播的順序?qū)?yīng)瀏覽器的兩種事件流模型:捕獲型事件流和冒泡型事件流。
事件開始時是由較為不具體的節(jié)點(diǎn)接收,然后逐級向下傳播到最具體的節(jié)點(diǎn) 。
事件冒泡事件開始時是由最具體的節(jié)點(diǎn)接收,然后逐級向上傳播到較為不具體的節(jié)點(diǎn)。
DOM事件流“DOM2級事件”規(guī)定事件流包括三個階段:
事件捕獲階段 --> 處于目標(biāo)階段 --> 事件冒泡階段
● 事件捕獲:事件發(fā)生時(onclick,onmouseover……)首先發(fā)生在document上,然后依次傳遞給body,最后到達(dá)目的節(jié)點(diǎn)(即事件目標(biāo))
● 事件冒泡:事件到達(dá)事件目標(biāo)之后不會結(jié)束,會逐層向上冒泡,直至document對象,跟事件捕獲相反
例如單擊頁面div
事件是用戶或?yàn)g覽器自身執(zhí)行的某種動作,如click,load和mouseover都是事件的名字。響應(yīng)某個事件的函數(shù)就叫事件處理程序(或事件偵聽器)。事件處理程序的名字以"on"開頭。
為事件指定事件處理程序的方法主要有3種。
事件直接加在DOM元素上。
//原生函數(shù) //自定義函數(shù)DOM0級事件處理程序
把一個函數(shù)賦值給一個事件處理程序?qū)傩浴?/p>
DOM2級事件處理程序
DOM2級事件處理程序可以為一個元素添加多個事件處理程序。其定義了兩個方法用于添加和刪除事件處理程序:addEventListener()和removeEventListener()。
優(yōu)點(diǎn):
可以綁定多個事件。
可以解除相應(yīng)的綁定
addEventListener
elementObject.addEventListener(eventName,handle,useCapture); IE8及以下不支持,屬于DOM2級的方法,可添加多個方法不被覆蓋
removeEventListener
通過addEventListener添加的事件處理程序必須通過removeEventListener刪除,且參數(shù)一致。
IE特有
attachEvent
elemObject.attachEvent("eventName", functionReference); IE特有,兼容IE8及以下,可添加多個事件處理程序,只支持冒泡階段
useCapture:(可選)指定事件是否在捕獲或冒泡階段執(zhí)行。true,捕獲。false,冒泡。默認(rèn)false。
detachEvent
通過attachEvent添加的事件處理程序必須通過detachEvent方法刪除,且參數(shù)一致。
兼容寫法示例function addEvent(obj,type,handle){ try{ // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本 obj.addEventListener(type,handle,false); }catch(e){ try{ // IE8.0及其以下版本 obj.attachEvent("on" + type,handle); }catch(e){ // 早期瀏覽器 obj["on" + type] = handle; } } }取消事件
給對象的事件屬性賦值為null,可取消此事件的所有注冊過的處理事件程序。
document.body.onclick=null; //onclick屬性賦值為null,相當(dāng)于注銷了onclick事件
阻止通過on這種方式綁定的事件的默認(rèn)事件
ele.onclick = function() { return false; //通過返回false值阻止默認(rèn)事件行為 };阻止事件
標(biāo)準(zhǔn)事件對象是e.stopPropagation(),IE則使用e.cancelBubble = true/false
var btn = document.getElementById("myButton"); btn.addEventListener("click", function(event) { event.stopPropagation(); }); //IE btn.attachEvent("onclick", function(event) { event.cancelBubble = true; });
標(biāo)準(zhǔn)事件對象使用preventDefault(),IE則使用returnValue = true/false
var btn = document.getElementById("myButton"); btn.addEventListener("click", function(event) { event.preventDefault(); }); //IE btn.attachEvent("onclick", function(event) { event.returnValue = false; });事件對象
事件在瀏覽器中是以對象的形式存在的,即event。觸發(fā)一個事件,就會產(chǎn)生一個事件對象event,該對象包含著所有與事件有關(guān)的信息。
部分屬性如下:
type屬性,被觸發(fā)的事件的類型
target屬性,直接事件目標(biāo),真正觸發(fā)事件的目標(biāo)
currentTarget屬性,其事件處理程序當(dāng)前正在處理事件的那個元素
在事件處理程序內(nèi)部,對象this始終等于currentTarget的值,而target則是包含事件的實(shí)際目標(biāo)。DOM中的事件對象
通過attachEvent()添加的事件處理程序,event對象作為參數(shù)傳入
部分屬性如下:
srcElement屬性,事件的目標(biāo)(與DOM中的target屬性相同)
兼容性處理function showMsg(event){ event = event || window.event; var ele = event.target || event.srcElement; ...... }事件處理程序中this
IE事件處理程序中this的值等于 window 對象,而在標(biāo)準(zhǔn)事件綁定當(dāng)中,this的值等于被綁定的元素。
var btn = document.getElementById("myButton"); btn.attachEvent("onclick", function(event) { alert(this === window); // true }); btn.addEventListener("click", function(event) { alert(this === btn); // true });事件委托
利用冒泡的原理,把事件加到父元素或祖先元素上,觸發(fā)執(zhí)行效果,解決事件處理程序過多問題。
事件委托優(yōu)點(diǎn):
提高JavaScript性能。事件委托可以顯著的提高事件的處理速度,減少內(nèi)存的占用
動態(tài)的添加DOM元素,不需要因?yàn)樵氐母膭佣薷氖录壎ā?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89323.html
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
摘要:設(shè)計模式資源整理操作符小知識點(diǎn)實(shí)現(xiàn)發(fā)郵件功能數(shù)據(jù)結(jié)構(gòu)與算法資源整理跨域函數(shù)的合成與柯里化系列之防抖節(jié)流系列之正則系列之系列之系列之編碼系列之系列之操作符對象中的坐標(biāo)檢測對象或數(shù)組系列之機(jī)制系列之構(gòu)造對象系列之總結(jié)系列之淺復(fù)制與深復(fù)制系列之對 Javascript設(shè)計模式資源整理JS操作符JS小知識點(diǎn)JS實(shí)現(xiàn)發(fā)郵件功能數(shù)據(jù)結(jié)構(gòu)與算法資源整理跨域函數(shù)的合成與柯里化JS系列之防抖節(jié)流JS系列...
摘要:若以多線程的方式操作這些,則可能出現(xiàn)操作的沖突。另外,因?yàn)槭菃尉€程的,在某一時刻內(nèi)只能執(zhí)行特定的一個任務(wù),并且會阻塞其它任務(wù)執(zhí)行。瀏覽器事件觸發(fā)線程事件觸發(fā)線程,當(dāng)一個事件被觸發(fā)時該線程會把事件添加到任務(wù)隊列的隊尾,等待引擎的處理。 首先,說下為什么 JavaScript 是單線程? 總所周知,JavaScript是以單線程的方式運(yùn)行的。說到線程就自然聯(lián)想到進(jìn)程。那它們有什么聯(lián)系呢? ...
閱讀 3135·2021-09-22 15:50
閱讀 3337·2021-09-10 10:51
閱讀 3152·2019-08-29 17:10
閱讀 2923·2019-08-26 12:14
閱讀 1842·2019-08-26 12:00
閱讀 951·2019-08-26 11:44
閱讀 657·2019-08-26 11:44
閱讀 2825·2019-08-26 11:41