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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

实现一个EventTarget类

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现一个EventTarget类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EventTarget

EventTarget是一個由可以接收事件的對象實現的接口,并且可以為它們創建偵聽器。

Element,document 和 window 是最常見的事件目標,但是其他對象也可以是事件目標,比如XMLHttpRequest,AudioNode,AudioContext 等等。

許多事件目標(包括元素,文檔和 window)還支持通過 on... 屬性和屬性設置事件處理程序。

構造函數節

  • EventTarget()

    創建一個新的 EventTarget 對象實例。

方法節

  • EventTarget.addEventListener()

    在EventTarget上注冊特定事件類型的事件處理程序。

  • EventTarget.removeEventListener()

    EventTarget中刪除事件偵聽器。

  • EventTarget.dispatchEvent()

    將事件分派到此EventTarget。

Mozilla chrome 代碼的其他方法節

Mozilla擴展,供JS實現的事件目標使用以 實現 on* 屬性。另見 WebIDL bindings 綁定。

  • void setEventHandler(DOMString type, EventHandler handler)
  • EventHandler getEventHandler(DOMString type)

示例節

EventTarget 的簡單實現節

function EventTarget() {this.listeners = {}; }Object.assign(EventTarget.prototype, {// listeners: null,// prefix:"on",addEventListener: function (type, callback) {if (!(type in this.listeners)) {this.listeners[type] = [];}this.listeners[type].push(callback);},removeEventListener: function (type, callback) {if (type in this.listeners) {let stack = this.listeners[type];let index = stack.indexOf(callback);console.log(index);//可能會添加多個while (index !== -1) {stack.splice(index, 1);index = stack.indexOf(callback);}}},dispatchEvent: function (event) {if (event.type in this.listeners) {let stack = this.listeners[event.type];event.target = this;stack.forEach(callback => {callback.call(this,event);})}} });let target = new EventTarget(); let remove = (e) => {console.log(e)}; target.addEventListener("test",remove); target.addEventListener("test",remove); target.addEventListener("test",(e) => {console.log(e)}); target.removeEventListener("test",remove); target.dispatchEvent({type:"test"});

當單擊這個例子中的按鈕時, this 和 currentTarget 都等于 document.body,因為事件處理程 序是注冊到這個元素上的。然而, target 元素卻等于按鈕元素,因為它是 click 事件真正的目標。由 于按鈕上并沒有注冊事件處理程序,結果 click 事件就冒泡到了 document.body,在那里事件才得到 了處理。

document.body.onclick = function(event){alert(event.currentTarget === document.body); //truealert(this === document.body); //truealert(event.target === document.getElementById("myBtn")); //true };

所有問事件的target和currentTarget區別的問題,都是在變相的問事件委托。

因為子元素將事件委托到父級的時候,event的target指向的還是子元素,而currentTarget指的是父元素

<ul><li>w</li><li>m</li><li>x</li> </ul> //子元素將事件委托給了父元素 document.querySelector('ul').addEventListener('click',(e) => {let text = e.target.innerText || e.target.textContent;swicth(text){case 'w':{console.info('this first li');break;}case 'm':{console.info('this second li');break;}case 'x':{console.info('this third li');break;}default:{new Error('No such Element')}} },false)

事件模擬

事件創建

參數事件類型字符串UIEvents

document.createEvent(EventTypeString)

  • UIEvents:一般化的 UI 事件。 鼠標事件和鍵盤事件都繼承自 UI 事件。 DOM3 級中是 UIEvent;
  • MouseEvents:一般化的鼠標事件。 DOM3 級中是 MouseEvent;
  • MutationEvents:一般化的 DOM 變動事件。 DOM3 級中是 MutationEvent;
  • HTMLEvents:一般化的 HTML 事件。沒有對應的 DOM3 級事件(HTML 事件被分散到其他類 別中);
  • KeyboardEvents :DOM3級中添加
var btn = document.getElementById("myBtn"); //創建事件對象 var event = document.createEvent("MouseEvents"); //初始化事件對象 event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0,false, false, false, false, 0, null); //添加事件監聽 btn.addEventListener("click",e => console.log(e)) //觸發事件dispatch中動態將this綁定到event.target上,也就是btn btn.dispatchEvent(event); //執行監聽函數 //e

總結

以上是生活随笔為你收集整理的实现一个EventTarget类的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲美女久久 | 国产成人在线视频 | 日韩在线一区二区三区四区 | 免费观看黄色一级视频 | 一本久久a精品一合区久久久 | 久久久久免费精品 | 免费在线看黄网站 | 亚洲蜜桃在线 | 国产在线观看成人 | 国产激情视频网站 | 一级在线看 | 吃奶摸下的激烈视频 | 中文字幕一区二区人妻电影丶 | 亚洲黄色在线网站 | 国产精品ww | 国产精品一区二区三区免费看 | 日韩精品123 | 成人h片在线观看 | 性色免费视频 | 国模丫头1000人体 | 欧美一区二区三区久久成人精品 | 国产亚洲av综合人人澡精品 | 男人的网站在线观看 | 涩涩在线看 | 夜夜草导航 | 大尺度做爰呻吟舌吻网站 | 中文字幕在线观看视频一区 | 亚洲AV成人无码精电影在线 | 午夜久久久久久久久久影院 | 欧美亚洲色综久久精品国产 | 麻豆国产在线播放 | 在线观看你懂的网站 | www网站在线免费观看 | 午夜毛片电影 | 午夜爽爽爽视频 | 国产精品一区二区在线免费观看 | 麻豆视频软件 | 国产自在线拍 | 亚洲性生活片 | 亚洲精品www久久久久久广东 | 99ri在线观看 | 国产污网站 | 囯产精品一品二区三区 | 一本色道久久hezyo加勒比 | 制服av在线 | 伦一理一级一a一片 | www.伊人| 校园春色在线观看 | 激情综合五月 | 天堂av免费在线 | 毛片在线免费播放 | 日日夜夜综合 | 人禽l交视频在线播放 视频 | 中文字幕精品无码一区二区 | 色久av | 日本三级韩国三级三级a级中文 | 欧美性猛交乱大交xxxx | 免费裸体视频网站 | 国产亚洲高清视频 | 91快射 | 国产在线视频在线观看 | 精品国产乱码久久久久久闺蜜 | 久草中文在线观看 | 亚洲av成人一区二区 | 久久久久亚洲AV | 国产一区二区三区久久 | 影音先锋欧美资源 | 性欧美激情 | 午夜啪视频 | 欧美日韩亚洲一区二区三区 | 中日韩中文字幕一区二区 | 国产又黄又大又粗视频 | 97视频成人 | 黑人极品ⅴideos精品欧美棵 | h片在线观看网站 | 国产黄片一区二区三区 | 香蕉久久综合 | 久久国产在线视频 | 干美女少妇 | 九九九九九精品 | 法国空姐电影在线 | 日日操夜夜操狠狠操 | 在线香蕉视频 | 性欧美极品另类 | 国精产品乱码一区一区三区四区 | 亚洲经典一区二区三区四区 | 久久久久久久久电影 | 综合久久久久久 | 最新91视频| cao国产 | a级在线免费观看 | 国产精品人人爽人人爽 | 成人快色| 青青青手机视频在线观看 | 亚洲午夜久久久久久久国产 | 亚洲一区中文字幕永久在线 | av资源在线看 | 精品国产一区二区不卡 | 一级黄网站 |