日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

addListener添加事件监听器,第三个参数useCapture (Boolean) 的作用

發布時間:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 addListener添加事件监听器,第三个参数useCapture (Boolean) 的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

addEventListener 有三個參數:第一個參數表示事件名稱(不含 on,如 "click");第二個參數表示要接收事件處理的函數;第三個參數為 useCapture,本文就講解它。

<div id="outDiv"> <div id="middleDiv"> <div id="inDiv">請在此點擊鼠標。</div> </div> </div><div id="info"></div> var outDiv = document.getElementById("outDiv"); var middleDiv = document.getElementById("middleDiv"); var inDiv = document.getElementById("inDiv"); var info = document.getElementById("info");outDiv.addEventListener("click", function () { info.innerHTML += "outDiv" + "<br>"; }, false); middleDiv.addEventListener("click", function () { info.innerHTML += "middleDiv" + "<br>"; }, false); inDiv.addEventListener("click", function () { info.innerHTML += "inDiv" + "<br>"; }, false);

上述是我們測試的代碼,根據 info 的顯示來確定觸發的順序,有三個 addEventListener,而 useCapture 可選值為 true 和 false,所以 2*2*2,可以得出 8 段不同的程序。

全為 false 時,觸發順序為:inDiv、middleDiv、outDiv;
全為 true 時,觸發順序為:outDiv、middleDiv、inDiv;
outDiv 為 true,其他為 false 時,觸發順序為:outDiv、inDiv、middleDiv;
middleDiv 為 true,其他為 false 時,觸發順序為:middleDiv、inDiv、outDiv;
……
最終得出如下結論:

true 的觸發順序總是在 false 之前;
如果多個均為 true,則外層的觸發先于內層;
如果多個均為 false,則內層的觸發先于外層。

?

?

?

?

2009-05-05 上午 10:18
http://www.haishabei.net/article.asp?id=117
public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

?

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

?

使用 EventDispatcher 對象注冊事件偵聽器對象,以使偵聽器能夠接收事件通知。 可以為特定類型的事件、階段和優先級在顯示列表的所有節點上注冊事件偵聽器。
成功注冊一個事件偵聽器后,無法通過額外調用 addEventListener() 來更改其優先級。 要更改偵聽器的優先級,必須首先調用 removeListener()。 然后,可以使用新的優先級再次注冊該偵聽器。

?

請記住,注冊該偵聽器后,如果繼續調用具有不同 type 或 useCapture 值的 addEventListener(),則會創建單獨的偵聽器注冊。 例如,如果首先注冊 useCapture 設置為 true 的偵聽器,則該偵聽器只在捕獲階段進行偵聽。 如果使用同一個偵聽器對象再次調用 addEventListener(),并將 useCapture 設置為 false,那么便會擁有兩個單獨的偵聽器:一個在捕獲階段進行偵聽,另一個在目標和冒泡階段進行偵聽。

?

不能只為目標階段或冒泡階段注冊事件偵聽器。 這些階段在注冊期間是成對出現的,因為冒泡階段只適用于目標節點的始祖。

?

如果不再需要某個事件偵聽器,可調用 removeEventListener() 刪除它,否則會產生內存問題。 由于垃圾回收器不會刪除仍包含引用的對象,因此不會從內存中自動刪除使用已注冊事件偵聽器的對象。

?

復制 EventDispatcher 實例時并不復制其中附加的事件偵聽器。 (如果新近創建的節點需要一個事件偵聽器,必須在創建該節點后附加該偵聽器)。 但是,如果移動 EventDispatcher 實例,則其中附加的事件偵聽器也會隨之移動。

?

如果在正在處理事件的節點上注冊事件偵聽器,則不會在當前階段觸發事件偵聽器,但會在事件流的稍后階段觸發,如冒泡階段。

?

如果從正在處理事件的節點中刪除事件偵聽器,則該事件偵聽器仍由當前操作觸發。 刪除事件偵聽器后,決不會再次調用該事件偵聽器(除非再次注冊以備將來處理)。

?

參數 type:String — 事件的類型。

?

listener:Function — 處理事件的偵聽器函數。 此函數必須接受 Event 對象作為其唯一的參數,并且不能返回任何結果,如以下示例所示:
function(evt:Event):void

?

函數可以有任何名稱。

?


useCapture:Boolean (default = false) — 確定偵聽器是運行于捕獲階段、目標階段還是冒泡階段。 如果將 useCapture 設置為 true,則偵聽器只在捕獲階段處理事件,而不在目標或冒泡階段處理事件。 如果 useCapture 為 false,則偵聽器只在目標或冒泡階段處理事件。 要在所有三個階段都偵聽事件,請調用兩次 addEventListener,一次將 useCapture 設置為 true,第二次再將 useCapture 設置為 false。

?

priority:int (default = 0) — 事件偵聽器的優先級。 優先級由一個帶符號的 32 位整數指定。 數字越大,優先級越高。 優先級為 n 的所有偵聽器會在優先級為 n -1 的偵聽器之前得到處理。 如果兩個或更多個偵聽器共享相同的優先級,則按照它們的添加順序進行處理。 默認優先級為 0。

?

useWeakReference:Boolean (default = false) — 確定對偵聽器的引用是強引用,還是弱引用。 強引用(默認值)可防止您的偵聽器被當作垃圾回收。 弱引用則沒有此作用。
類 級別成員函數不屬于垃圾回收的對象,因此可以對類級別成員函數將 useWeakReference 設置為 true 而不會使它們受垃圾回收的影響。 如果對作為嵌套內部函數的偵聽器將 useWeakReference 設置為 true,則該函數將被作為垃圾回收并且不再是永久函數。 如果創建對該內部函數的引用(將該函數保存到另一個變量中),則該函數將不作為垃圾回收并仍將保持永久。

?

源自:http://hi.baidu.com/ls_mcx/blog/item/203febd9efdc633f32fa1c40.html

?

總結

以上是生活随笔為你收集整理的addListener添加事件监听器,第三个参数useCapture (Boolean) 的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。