js事件對象兼容性


  事件對象:event

  1.常用事件:onclick(點擊)  onmouseenter(鼠標進入)  onmouseover(鼠標懸浮)  onmouseleave(鼠標離開)  onfocus(表單聚焦)  onblur(表單失去焦點)  onmouseout(鼠標移出)  onmousemove(鼠標移動)  onmousedown(鼠標按下)  onmouseup(鼠標抬起)  onchange(表單內容修改)  瀏覽器加載完成(onload)  計數器(count)

  2.每個元素身上的事件都是天生存在的,不需要我們去定義,只需要我給這個事件綁定一個方法,當事件觸發的時候,就會執行這個方法

  3.事件綁定的寫法:

  1.div.onclick=function(){}    dom0級事件

  2.div.addEventListener或者div.attachEvent      dom2級事件

  寫法上二者的區別

  1.onclick這個元素的屬性是私有的   而  addEventListener()是公有的屬性 從EventTarget(事件源)繼承來的   ie低版本attachevent也是公有的

  2.div.onclick存在事件冒泡機制,沒有捕獲

    div.addEventListener可有冒泡,可有捕獲;

    div.attachEvent 只有冒泡,沒有捕獲;  

  4.div.addEventListener和div.attachEvent的區別?

    1.前者有冒泡和捕獲機制,后者只有冒泡機制;

    2.事件名前者不帶on,后者帶on

    3.前者this指向當前元素,后者指向window

    4.前者是標准瀏覽器,后者ie8以下

  案例:

  var div=document.getElementById("div")

  div.onclick=function(){

    console.log(arguments)

    }

  上面控制台arguments數組有一個元素叫mouseevent

  arguments(參數):

  每個函數都有一個arguments對象,他是這個函數,所有參數構成的集合

  所以每個事件的方法中瀏覽器都給它一個參數叫mouse event,我們所有的鼠標信息在這個mouse event上 

  1.event兼容性:聲明不一樣

  標准瀏覽器聲明為undefined        IE聲明為null          火狐無法識別(會報錯)

  解決辦法:

  div.onclick=function(ev){

    var ev=ev||window.event

    }

  clientX和clientY的兼容性是鼠標離瀏覽器窗口左上角的坐標距離

  pageX和pageY他是鼠標到網頁(文檔)左上角的距離坐標,但是IE低版本沒有這個屬性,在IE下怎么算pageY的值,用clientY+scrollTop

  2.事件源,點擊哪個元素,哪個元素就是事件源

  事件源的兼容:

  標准瀏覽器的事件源是ev.target    ie低版本(5-8)不識別這個屬性,但是ie有ev.srcElement這個屬性和target差不多

  3.阻止事件冒泡的兼容性(之前的版本有,現在沒有了,僅供了解)

  第一種:ie低版本的寫法為event.cancelBubble=true;       標准瀏覽器的寫法為:event.stoppropagation(現在標准瀏覽器也支持了event.cancel Bubble的寫法)

  他的兼容性寫法為:event.stoppropargation?event.stopropagation:event.cancelBubble;

  阻止事件默認行為的兼容性:

  4.阻止事件默認行為的兼容性:

  比如  a的href

  href為空,會自動刷新頁面

  href為#,  錨點跳轉

  href為JavaScript:; 阻止默認行為的發生    

  (以上是a標簽阻止瀏覽器的默認行為,但也有別的事件會有默認行為)

  標准瀏覽器:

  event.preventDefault()

  ie低版本的寫法:

  event.retrunValue

  兼容性的寫法為event.preventDefault()?event.preventDefaulf():event.returnValue;

  事件委托:

  委托就是利用事件冒泡(所有的dom操作離不開事件)

  如果子元素身上綁定大量相同的事件,我們盡量采用事件委托,所有子元素把自己的子元素委托給父級

  傳統的for循環綁定事件會增加大量的dom操作(事件)影響頁面性能,采用事件委托就把所有事件基於一個元素上

  事件委托的原理:采用事件冒泡機制完成的

  2.事件委托和傳統事件綁定的優勢?

  傳統事件對新增元素不起作用,事件委托起作用

  傳統事件綁定,有多少元素,js就綁定多少事件,事件委托,只需要一個事件

  並不是所有事件都存在事件冒泡:

  onmouseenter(鼠標進入)  onmouseleave(鼠標離開)就沒有事件冒泡

  所以我們做跟隨鼠標的時候,盡量用者兩個事件

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM