js(Dom+Bom)第五天(2)
webAPI
01-事件監(jiān)聽
-
為什么要學(xué)事件監(jiān)聽
之前給元素注冊事件的時候,同一個事件會被覆蓋掉 -
事件監(jiān)聽的本質(zhì)
通過另外一種方式給元素注冊事件, 同時可以解決同一個事件不會被覆蓋掉.
知識點-通過 on 方式給元素注冊事件
之前注冊事件的方式:事件源.onclick = function() {}on是一種方式 click 才是一個具體的事件類型特點: 1.無法給同一個事件源注冊同一種事件類型,后面的事件會將前面的事件覆蓋掉. 2.對象身上有onclick這個屬性, 當(dāng)給onclick這個屬性賦值的時候,屬性原來的值會被覆蓋掉知識點-通過addEventListener方式注冊事件
-
語法
事件源.addEventListener('事件類型', 函數(shù)處理程序);注意事項: 1. 事件類型是不能代 'on' 例如點擊事件: click 2. 函數(shù)處理程序 可以是一個匿名函數(shù),也可以調(diào)用一個命名函數(shù) 3. 第二個參數(shù)函數(shù)處理程序如果是一個命名函數(shù),那么只寫函數(shù)的名稱,不能加小括號(代表函數(shù)的調(diào)用)例如: btn.addEventListener('click', fn); function fn() {alert('你好'); }4. 如果addEventListener想要調(diào)用一個帶有參數(shù)的函數(shù)那么可以按照如下寫法:btn.addEventListener('click', function(){fn(2); })function fn(a){alert(a); } -
特點
- addEventListener 在注冊事件的時候,同一種事件不會被覆蓋掉
- 原理:將事件添加到一個 eventTarget 對象集合(數(shù)組)上
知識點-通過attachEvent方式注冊事件
-
attachEvent 專門為IE低版本瀏覽器設(shè)置的方法
-
語法
事件源.attachEvent('事件類型', 處理程序); -
特點
- 事件類型需要加 ‘on’
- 處理程序 與 addEventListener 中的處理程序用法一模一樣
知識點-移除事件
-
移除 on 方式注冊事件
事件源.事件類型 = null; 例如:div.onclick = null; -
移除addEventListener事件
-
語法
DOM.removeEventListener('事件類型', 命名函數(shù)) -
總結(jié)
- removeEventListener()這個方法就是用來移除addEventListener注冊的事件
- addEventListener注冊事件的時候,必須使用命名函數(shù)
- removeEventListener()中第二參數(shù)命名函數(shù)
-
-
移除attachEvent事件
DOM.detachEvent(event_type,event_name)- 總結(jié):
- detachEvent方法是用來移除 attachEvent 事件的
- detachEvent()方法中第二個參數(shù)也需要一個命名函數(shù)
- detachEvent方法的使用方式與removeEventListener一樣
5. 兼容寫法
02-事件流
在網(wǎng)頁中,如果遇到嵌套的盒子, 那么當(dāng)點擊子元素的時候, 父元素也會有被點擊的效果 ----> 類似于CSS中的塌陷事件流組成
-
知識點-事件冒泡階段
以點擊事件舉例:子元素被點了, 父元素也有被點擊的效果 ----> 事件冒泡 -
知識點-事件捕獲階段
以點擊事件舉例:當(dāng)前元素被點擊的時候, 先從父元素開始執(zhí)行, 然后傳到 子元素 -
知識點-事件目標(biāo)階段
事件目標(biāo)階段 : 就是指的是當(dāng)前事件源
-
事件流總結(jié)
1. 事件流與注冊事件的方式?jīng)]有任何關(guān)系 2. 不是所有的事件都有事件冒泡 3. 如果當(dāng)前事件有冒泡, 那么通過 addEventListener 可以將冒泡階段和 捕獲階段都可以通過第三參數(shù)表現(xiàn)出來 4. 如果有事件冒泡, 那么 通過 onclick 這種方式 只能看到冒泡階段, 無法表現(xiàn)捕獲階段(不支持第三個參數(shù))
事件委托
事件委托: 屬于一種編程實現(xiàn). 事件委托: 本應(yīng)該當(dāng)前事件源執(zhí)行對應(yīng)的事件,但是最后是交給父元素執(zhí)行的- 事件委托具備的條件
- 當(dāng)前元素得有父元素
- 當(dāng)前事件得有冒泡效果
事件對象參數(shù)
-
什么是事件對象參數(shù)
事件對象參數(shù): 事件中內(nèi)置的一個參數(shù), 保存了用戶在執(zhí)行這個事件時候的一些信息比如: 當(dāng)前事件的類型, 點擊的對象是誰(真正的事件源是誰)..... -
事件對象參數(shù)怎么用
- 事件對象參數(shù)不需要我們手動的傳值(當(dāng)執(zhí)行事件的時候,就會有值)
- 事件對象參數(shù)本質(zhì)上就是一個對象
03-事件對象參數(shù)
一下的代碼結(jié)構(gòu)可以用此方式查詢:
e.target : 獲取真正觸發(fā)事件的對象(事件源)
e.type: 事件類型
e.clientX | e.clientY (鼠標(biāo)坐標(biāo)信息)
e.clientX : 獲取鼠標(biāo)的橫坐標(biāo)相對整個網(wǎng)頁的可視區(qū)域 e.clientY : 獲取鼠標(biāo)的縱坐標(biāo)相對整個網(wǎng)頁的可視區(qū)域e.pageX | e.pageY (鼠標(biāo)坐標(biāo)信息)
e.pageX: 獲取鼠標(biāo)的橫坐標(biāo)相對整個頁面的 e.pageY: 獲取鼠標(biāo)的縱坐標(biāo)相對整個頁面的如果: 1. 網(wǎng)頁中沒有滾動條, 默認(rèn) e.pageX 和 e.clientX 2. 如果網(wǎng)頁中有滾動條, 那么 e.pageX 就要包含滾動條滾出去的位置e.screenX | e.screenY (鼠標(biāo)坐標(biāo)信息)
e.screenX: 獲取鼠標(biāo)橫坐標(biāo)相對整個屏幕的 e.screenY: 獲取鼠標(biāo)的縱坐標(biāo)相對整個屏幕的e.offsetX | e.offsetY (鼠標(biāo)坐標(biāo)信息)
e.offsetX : 獲取鼠標(biāo)橫坐標(biāo)相對當(dāng)前事件源左上角 e.offsetY: 獲取鼠標(biāo)縱坐標(biāo)相對當(dāng)前事件源左上角e.stopPropagation() 阻止事件冒泡
e.stopPropagation() 作用: 阻止事件冒泡04-鍵盤事件對象參數(shù)
- e.key
- e.keyCode
BOM
取鼠標(biāo)縱坐標(biāo)相對當(dāng)前事件源左上角
7. e.stopPropagation() 阻止事件冒泡 ```js e.stopPropagation() 作用: 阻止事件冒泡04-鍵盤事件對象參數(shù)
- e.key
- e.keyCode
BOM
總結(jié)
以上是生活随笔為你收集整理的js(Dom+Bom)第五天(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js(Dom+Bom)第五天(1)
- 下一篇: js(Dom+Bom)第六天(1)