亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    一文詳解js中的事件對(duì)象、事件源對(duì)象和事件流

    js中事件對(duì)象、事件源對(duì)象、事件流分析理解

    事件對(duì)象(event)

    • 什么是事件:事件就是指js中所有可以發(fā)生的有并且有監(jiān)聽(tīng)的事件,比如:(鼠標(biāo)、鍵盤(pán)以及瀏覽器窗口變化等)

    • 是什么是事件對(duì)象(event):通俗講就是一個(gè)記錄了事件各種信息的一個(gè)對(duì)象。
      這里需要注意的是:事件對(duì)象會(huì)有兼容性問(wèn)題,在除IE的瀏覽器中為event,而非瀏覽器中為window.event,

    btn.onclick = function(event){let e = event || window.event}

    事件源對(duì)象

    簡(jiǎn)單來(lái)說(shuō),就是指事件具體是在那個(gè)對(duì)象上發(fā)生的,對(duì)于element元素來(lái)說(shuō),事件源對(duì)象就是指你所點(diǎn)擊的元素。同樣存在瀏覽器兼容問(wèn)題:

    • 在fireFox中為event.srcElement
    • 在IE中為event.target
      兼容寫(xiě)法參照事件對(duì)象

    事件流

    事件流主要分為兩類(lèi):1.捕獲事件 2.冒泡事件 觸發(fā)順序是先捕獲在冒泡
    但是如果細(xì)分的話在捕獲到冒泡階段會(huì)存在一個(gè)目標(biāo)階段,即所具體操做的dom元素要進(jìn)行的操作階段

    捕獲事件

    先由最上一級(jí)的節(jié)點(diǎn)先接收事件,然后向下傳播到具體的節(jié)點(diǎn)。eg:當(dāng)用戶(hù)點(diǎn)擊了p元素,采用事件捕獲,則click事件將按照document>htm>body>p的順序進(jìn)行傳播。傳遞方式是由外向內(nèi)傳遞。

    冒泡事件

    和捕獲事件相反,它是由內(nèi)向外傳遞,當(dāng)用戶(hù)點(diǎn)擊p時(shí)它會(huì)向父級(jí)傳遞,p>body>html。***由于這種特性常常用于事件委托。

    事件委托

    我們將所有子元素要觸發(fā)的相同事件綁定到父元素身上,這樣可以減少對(duì)DOM操作提高性能。具體使用方法是使用事件源對(duì)象的方法。

    <ul>         <li>1</li>         <li>2</li>         <li>3</li>         <li>4</li>         <li>5</li>     </ul>

    要對(duì)li綁定點(diǎn)擊事件,通常我們的做法是循環(huán)給li田間點(diǎn)擊事件

     let oLi = document.querySelectorAll("li")  for(let i; i < oLi.length; i++){             oLi[i].onclick = function(){                 console.log("i")             }         }

    而使用事件委托的方法是

    let oUl = document.querySelector("ul")   oUl.onclick = function(event){             let e = event || window.event             console.log(e.target.innerHTML)         }
    • 優(yōu)點(diǎn)
    • 提高性能,不需要循環(huán)所有元素一個(gè)一個(gè)綁定事件。
    • 靈活,有動(dòng)態(tài)創(chuàng)建進(jìn)來(lái)的新元素不需要重新綁定事件。

    阻止事件冒泡和阻止默認(rèn)事件

    阻止事件冒泡的操作(兼容性寫(xiě)法)

    ***有些事件不需要進(jìn)行冒泡操作

    function stopBubble(event){     var e = event||window.event //事件對(duì)象兼容寫(xiě)法     e.stopProgation() ? e.stopProgation() : e.cancelBubble = true //IE兼容寫(xiě)法}

    阻止默認(rèn)事件(兼容寫(xiě)法)

    ***阻止a標(biāo)簽以及鼠標(biāo)右鍵默認(rèn)跳轉(zhuǎn)和菜單事件

    function cancelHandle(event){     var e = event||window.event     e.preventDefault() ? e.preventDefault() : e.returnValue = false/*ie*/}

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)