成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript系列之事件詳解

pakolagij / 2169人閱讀

摘要:響應(yīng)某個(gè)事件的函數(shù)就叫事件處理程序或事件偵聽(tīng)器。為事件指定事件處理程序的方法主要有種。事件處理程序事件直接加在元素上。事件委托利用冒泡的原理,把事件加到父元素或祖先元素上,觸發(fā)執(zhí)行效果,解決事件處理程序過(guò)多問(wèn)題。事件委托優(yōu)點(diǎn)提高性能。

JavaScript簡(jiǎn)單入門(mén)可以看看我丑丑的Github博客JavaScript簡(jiǎn)單入門(mén)

事件

JavaScript與HTML之間的交互是通過(guò)事件實(shí)現(xiàn)的。事件是文檔或者瀏覽器窗口中發(fā)生的,特定的交互瞬間。

事件流

事件流描述的是從頁(yè)面中接收事件的順序。
事件傳播的順序?qū)?yīng)瀏覽器的兩種事件流模型:捕獲型事件流和冒泡型事件流。

事件捕獲

事件開(kāi)始時(shí)是由較為不具體的節(jié)點(diǎn)接收,然后逐級(jí)向下傳播到最具體的節(jié)點(diǎn) 。

事件冒泡

事件開(kāi)始時(shí)是由最具體的節(jié)點(diǎn)接收,然后逐級(jí)向上傳播到較為不具體的節(jié)點(diǎn)。

DOM事件流

“DOM2級(jí)事件”規(guī)定事件流包括三個(gè)階段:

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

● 事件捕獲:事件發(fā)生時(shí)(onclick,onmouseover……)首先發(fā)生在document上,然后依次傳遞給body,最后到達(dá)目的節(jié)點(diǎn)(即事件目標(biāo))
● 事件冒泡:事件到達(dá)事件目標(biāo)之后不會(huì)結(jié)束,會(huì)逐層向上冒泡,直至document對(duì)象,跟事件捕獲相反

例如單擊頁(yè)面div

事件處理程序

事件是用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作,如click,load和mouseover都是事件的名字。響應(yīng)某個(gè)事件的函數(shù)就叫事件處理程序(或事件偵聽(tīng)器)。事件處理程序的名字以"on"開(kāi)頭。
為事件指定事件處理程序的方法主要有3種。

html事件處理程序

事件直接加在DOM元素上。

//原生函數(shù)

//自定義函數(shù)

DOM0級(jí)事件處理程序

把一個(gè)函數(shù)賦值給一個(gè)事件處理程序?qū)傩浴?/p>


DOM2級(jí)事件處理程序

DOM2級(jí)事件處理程序可以為一個(gè)元素添加多個(gè)事件處理程序。其定義了兩個(gè)方法用于添加和刪除事件處理程序:addEventListener()和removeEventListener()。
優(yōu)點(diǎn):

可以綁定多個(gè)事件。

可以解除相應(yīng)的綁定

addEventListener

elementObject.addEventListener(eventName,handle,useCapture); IE8及以下不支持,屬于DOM2級(jí)的方法,可添加多個(gè)方法不被覆蓋

removeEventListener

通過(guò)addEventListener添加的事件處理程序必須通過(guò)removeEventListener刪除,且參數(shù)一致。


IE特有

attachEvent
elemObject.attachEvent("eventName", functionReference); IE特有,兼容IE8及以下,可添加多個(gè)事件處理程序,只支持冒泡階段


useCapture:(可選)指定事件是否在捕獲或冒泡階段執(zhí)行。true,捕獲。false,冒泡。默認(rèn)false。

detachEvent

通過(guò)attachEvent添加的事件處理程序必須通過(guò)detachEvent方法刪除,且參數(shù)一致。

兼容寫(xiě)法示例
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;
        }
    }
}
取消事件

給對(duì)象的事件屬性賦值為null,可取消此事件的所有注冊(cè)過(guò)的處理事件程序。

document.body.onclick=null;     //onclick屬性賦值為null,相當(dāng)于注銷了onclick事件

阻止通過(guò)on這種方式綁定的事件的默認(rèn)事件

ele.onclick = function() {
    return false;              //通過(guò)返回false值阻止默認(rèn)事件行為
};
阻止事件
阻止事件冒泡

標(biāo)準(zhǔn)事件對(duì)象是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;  
});
阻止默認(rèn)事件

標(biāo)準(zhǔn)事件對(duì)象使用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;
});
事件對(duì)象

事件在瀏覽器中是以對(duì)象的形式存在的,即event。觸發(fā)一個(gè)事件,就會(huì)產(chǎn)生一個(gè)事件對(duì)象event,該對(duì)象包含著所有與事件有關(guān)的信息。
部分屬性如下:

type屬性,被觸發(fā)的事件的類型

target屬性,直接事件目標(biāo),真正觸發(fā)事件的目標(biāo)

currentTarget屬性,其事件處理程序當(dāng)前正在處理事件的那個(gè)元素

在事件處理程序內(nèi)部,對(duì)象this始終等于currentTarget的值,而target則是包含事件的實(shí)際目標(biāo)。
DOM中的事件對(duì)象

通過(guò)attachEvent()添加的事件處理程序,event對(duì)象作為參數(shù)傳入


部分屬性如下:

srcElement屬性,事件的目標(biāo)(與DOM中的target屬性相同)

兼容性處理
function showMsg(event){
    event = event || window.event;  
    var ele = event.target || event.srcElement; 
    ......
 }
事件處理程序中this

IE事件處理程序中this的值等于 window 對(duì)象,而在標(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í)行效果,解決事件處理程序過(guò)多問(wèn)題。
事件委托優(yōu)點(diǎn):

提高JavaScript性能。事件委托可以顯著的提高事件的處理速度,減少內(nèi)存的占用

動(dòng)態(tài)的添加DOM元素,不需要因?yàn)樵氐母膭?dòng)而修改事件綁定。

  • red
  • orange
  • yellow
  • green

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89323.html

相關(guān)文章

  • 前端文檔收集

    摘要:系列種優(yōu)化頁(yè)面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁(yè)性能管理詳解離線緩存簡(jiǎn)介系列編寫(xiě)高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問(wèn)性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁(yè)面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁(yè)性能管理詳解 HTML5 ...

    jsbintask 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁(yè)面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁(yè)性能管理詳解離線緩存簡(jiǎn)介系列編寫(xiě)高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問(wèn)性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁(yè)面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁(yè)性能管理詳解 HTML5 ...

    muddyway 評(píng)論0 收藏0
  • JS系列目錄

    摘要:設(shè)計(jì)模式資源整理操作符小知識(shí)點(diǎn)實(shí)現(xiàn)發(fā)郵件功能數(shù)據(jù)結(jié)構(gòu)與算法資源整理跨域函數(shù)的合成與柯里化系列之防抖節(jié)流系列之正則系列之系列之系列之編碼系列之系列之操作符對(duì)象中的坐標(biāo)檢測(cè)對(duì)象或數(shù)組系列之機(jī)制系列之構(gòu)造對(duì)象系列之總結(jié)系列之淺復(fù)制與深復(fù)制系列之對(duì) Javascript設(shè)計(jì)模式資源整理JS操作符JS小知識(shí)點(diǎn)JS實(shí)現(xiàn)發(fā)郵件功能數(shù)據(jù)結(jié)構(gòu)與算法資源整理跨域函數(shù)的合成與柯里化JS系列之防抖節(jié)流JS系列...

    AaronYuan 評(píng)論0 收藏0
  • 第五天 JavaScript單線程詳解

    摘要:若以多線程的方式操作這些,則可能出現(xiàn)操作的沖突。另外,因?yàn)槭菃尉€程的,在某一時(shí)刻內(nèi)只能執(zhí)行特定的一個(gè)任務(wù),并且會(huì)阻塞其它任務(wù)執(zhí)行。瀏覽器事件觸發(fā)線程事件觸發(fā)線程,當(dāng)一個(gè)事件被觸發(fā)時(shí)該線程會(huì)把事件添加到任務(wù)隊(duì)列的隊(duì)尾,等待引擎的處理。 首先,說(shuō)下為什么 JavaScript 是單線程? 總所周知,JavaScript是以單線程的方式運(yùn)行的。說(shuō)到線程就自然聯(lián)想到進(jìn)程。那它們有什么聯(lián)系呢? ...

    caiyongji 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<