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