摘要:不加入布爾值的原因是只支持事件冒泡跨瀏覽器解決添加事件移除事件獲取事件對(duì)象阻止事件冒泡阻止事件默認(rèn)行為事件對(duì)象在觸發(fā)上的事件都會(huì)產(chǎn)生一個(gè)對(duì)象。
什么是事件
事件流——描述的是從頁(yè)面中接受事件的順序。
事件冒泡:由具體的元素接收逐級(jí)傳遞到最不具體的那一個(gè)節(jié)點(diǎn)。
事件捕獲:由不太具體的節(jié)點(diǎn)應(yīng)該更早接收到事件,而最具體的節(jié)點(diǎn)最后接收到事件
html事件處理程序。缺點(diǎn):html代碼和js代碼緊密耦合。
DOM0級(jí)事件處理程序。
DOM2級(jí)事件處理程序。
DOM2級(jí)事件處理程序定義了兩個(gè)方法:用于處理指定和刪除事件處理程序。
addEventListener()和removeEventListener()
接收三個(gè)參數(shù):要處理的事件名,作為事件處理程序的函數(shù)和布爾值
//btn3.addEventListener("click",message,false);
IE事件處理程序
attachEvent()添加事件, detachEvent()刪除事件
接收相同的兩個(gè)參數(shù):事件處理程序的名稱和時(shí)間處理程序的函數(shù)。不加入布爾值的原因是IE8只支持事件冒泡
跨瀏覽器解決
var eventUtil = { //添加事件 addHandler:function(element, type, handler){ if(element.addEventListener){ element.addEventListener(type,handler,false); } else if(element.attachEvent){ element.attachEvent("on"+type,handler); } else{ element["on"+type] = handler; } }, //移除事件 removeHandler:function(element, type, handler){ if(element.removeEventListener){ element.removeEventListener(type,handler,false); } else if(element.detachEvent){ element.detachEvent("on"+type,handler); } else{ element["on"+type] = handler; } } //獲取事件對(duì)象 getEvent:function(event){ return event?event:window.event; }, getType:function(event){ return event.type; }, getTarget:function(event){ if(event.target){ return event.target; } else{ return event.srcElement; } }, //阻止事件冒泡 getStopPropagetion:function(event){ if(event.stopPropagation){ return event.stopPropagation(); } else{ return event.cancelBubble=true; } }, //阻止事件默認(rèn)行為 getPreventDefault:function(event){ if(event.preventDefault){ return event.preventDefault(); } else{ return event.returnValue=false; } } } eventUtil.addHandler(btn3,"click", message); eventUtil.removeHandler(btn3,"click", message);事件對(duì)象
在觸發(fā)DOM上的事件都會(huì)產(chǎn)生一個(gè)對(duì)象。
事件對(duì)象event
DOM中的事件對(duì)象。
(1)type屬性,獲取事件類型。event.type (2)target屬性,獲取事件目標(biāo)。 (3)stopPropagation()方法,用于阻止事件冒泡。 (4)preventDefault()方法,阻止事件的默認(rèn)行為。
2.IE中的事件對(duì)象
(1)type屬性,獲取事件對(duì)象 (2)srcElement屬性,獲取事件對(duì)象 (3)cancelBubble=true方法,用于阻止事件冒泡 (4)returnValue=false ,阻止事件的默認(rèn)行為。事件類型
鼠標(biāo)事件
MouseEvent對(duì)象
屬性 //鼠標(biāo)事件發(fā)生時(shí),鼠標(biāo)的位置 -clientX,clientY //和頁(yè)面的距離 -screntX,screntY //和屏幕的距離 -ctrlKey,shiftKey,altKey,metaKey //當(dāng)事件觸發(fā)是,鍵盤是按下的,則為true -button(0,1,2)
觸發(fā)順序
//一個(gè)窗口拖動(dòng)的例子 //封裝一個(gè)獲取元素的方法,防止出現(xiàn)IE不兼容等問(wèn)題 function getByClass(clsName,parent){ var oParent = parent? document.getElementById(parent):document, eles = [], elements = oParent.getElementsByTagName("*"); for(var i = 0, l = elements.length; i < l; i++){ if(elements[i].className == clsName){ eles.push(elements[i]); } } return eles; } window.onload = drag; //在標(biāo)題區(qū)按下 function drag(){ var oTitile = getByClass("login_logo_webqq","loginPanel")[0]; //移動(dòng) oTitile.onmousedown = fnDown; //關(guān)閉窗口 var oClose = document.getElementById("ui_boxyClose"); oClose.onclick = function(){ document.getElementById("loginPanel").style.display="none"; } } //在頁(yè)面中移動(dòng) //釋放鼠標(biāo)時(shí)停止移動(dòng) function fnDown(){ var oDrag = document.getElementById("loginPanel"); document.onmousemove = function(event){ event = event || window.event;//瀏覽器兼容 oDrag.style.left = event.clientX + "px"; oDrag.style.top = event.clientY + "px"; } //釋放鼠標(biāo) document.onmouseup = function(){ document.onmousemove = null; document.onmouseup - null; } }
鍵盤事件
事件代理事件代理在JS世界中一個(gè)非常有用也很有趣的功能。當(dāng)我們需要對(duì)很多元素添加事件的時(shí)候,可以通過(guò)將事件添加到它們的父節(jié)點(diǎn)而將事件委托給父節(jié)點(diǎn)來(lái)觸發(fā)處理函數(shù)。這主要得益于瀏覽器的事件冒泡機(jī)制
例子 //html
為父節(jié)點(diǎn)添加一個(gè)click事件,當(dāng)子節(jié)點(diǎn)被點(diǎn)擊的時(shí)候,click事件會(huì)從子節(jié)點(diǎn)開(kāi)始向上冒泡。父節(jié)點(diǎn)捕獲到事件之后,通過(guò)判斷e.target.nodeName來(lái)判斷是否為我們需要處理的節(jié)點(diǎn)。并且通過(guò)e.target拿到了被點(diǎn)擊的Li節(jié)點(diǎn)。從而可以獲取到相應(yīng)的信息,并作處理
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80686.html
摘要:好多編輯器例如等都支持這樣的語(yǔ)法來(lái)快速的編寫代碼如何優(yōu)雅地使用把標(biāo)簽放在結(jié)束標(biāo)簽之后結(jié)束標(biāo)簽之前的差別什么是響應(yīng)式設(shè)計(jì)怎樣進(jìn)行 書籍 《JavaScriptDOM編程藝術(shù)》《JavaScript高級(jí)程序設(shè)計(jì)》《JavaScript框架設(shè)計(jì)》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語(yǔ)言精粹(修訂版)》《JavaScript設(shè)計(jì)模式》《J...
摘要:好多編輯器例如等都支持這樣的語(yǔ)法來(lái)快速的編寫代碼如何優(yōu)雅地使用把標(biāo)簽放在結(jié)束標(biāo)簽之后結(jié)束標(biāo)簽之前的差別什么是響應(yīng)式設(shè)計(jì)怎樣進(jìn)行 書籍 《JavaScriptDOM編程藝術(shù)》《JavaScript高級(jí)程序設(shè)計(jì)》《JavaScript框架設(shè)計(jì)》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語(yǔ)言精粹(修訂版)》《JavaScript設(shè)計(jì)模式》《J...
摘要:好多編輯器例如等都支持這樣的語(yǔ)法來(lái)快速的編寫代碼如何優(yōu)雅地使用把標(biāo)簽放在結(jié)束標(biāo)簽之后結(jié)束標(biāo)簽之前的差別什么是響應(yīng)式設(shè)計(jì)怎樣進(jìn)行 書籍 《JavaScriptDOM編程藝術(shù)》《JavaScript高級(jí)程序設(shè)計(jì)》《JavaScript框架設(shè)計(jì)》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語(yǔ)言精粹(修訂版)》《JavaScript設(shè)計(jì)模式》《J...
摘要:布爾值表示捕獲階段調(diào)用事件處理程序,表示冒泡階段通過(guò)對(duì)象的方法,也可以定義事件的回調(diào)函數(shù)。對(duì)象會(huì)被作為第一個(gè)參數(shù)傳遞給事件監(jiān)聽(tīng)的回調(diào)函數(shù)。布爾默認(rèn)值是,當(dāng)設(shè)置成時(shí)用以取消事件的默認(rèn)行為與中的相同。 其實(shí)這篇文章挺早之前就寫了,但是由于sf保存方面的bug,所以當(dāng)時(shí)寫了一大堆,結(jié)果沒(méi)保存,覺(jué)得這個(gè)沒(méi)寫完是個(gè)不小的遺憾,今天正好有空,就給補(bǔ)充下了,也正好給我的javascript學(xué)習(xí)總結(jié)做...
摘要:然而在中國(guó),還處于比較初級(jí)的階段,很多企業(yè)對(duì)自身安全問(wèn)題并沒(méi)有系統(tǒng)性的管理。年整個(gè)中國(guó)市場(chǎng)只有億人民幣的規(guī)模,這個(gè)數(shù)字相比中國(guó)經(jīng)濟(jì)對(duì)全球經(jīng)濟(jì)的占比是不相符的。 showImg(https://segmentfault.com/img/bV9xRN?w=865&h=950);作者簡(jiǎn)介: 叢磊,白山合伙人兼工程副總裁2016年加入白山,主要負(fù)責(zé)云聚合產(chǎn)品的研發(fā)管理和云鏈產(chǎn)品體系構(gòu)建等。20...
閱讀 6919·2021-09-22 15:36
閱讀 5710·2021-09-02 10:20
閱讀 1879·2019-08-30 15:44
閱讀 2660·2019-08-29 14:06
閱讀 1162·2019-08-29 11:17
閱讀 1609·2019-08-26 14:05
閱讀 3104·2019-08-26 13:50
閱讀 1559·2019-08-26 10:26