国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript自定義事件功能與用法實例分析

2024-05-06 15:24:36
字體:
來源:轉載
供稿:網友

本文實例講述了javascript自定義事件功能與用法。分享給大家供大家參考,具體如下:

概述

自定義事件很難派上用場?

為什么自定義事件很難派上用場,因為以前js不是模塊化開發,也很少協作。因為事件本質是一種通信方式,是一種消息,只有存在多個對象,多個模塊的情況下,才有可能需要用到事件進行通信。而現在有了模塊化之后,已經可以使用自定義事件進行各模塊間協作了。

哪里用得到自定義事件?

事件本質是一種消息,事件模式本質上是觀察者模式的實現,那么用得上觀察者模式的地方,自然也可以也可以用上事件模式。所以,如果:

1、一個目標對象改變,需要多個觀察者調整自身的。

比如:我需要元素A點擊之后,元素B顯示鼠標的位置,元素C顯示提示,元素D.....

2、分模塊協作需要解耦的

比如:甲負責模塊A,乙負責模塊B,模塊B需要A運行完之后才能運行

傳統的寫法將邏輯寫在一個方法里面:

function doSomething(){  A();  B();}

這樣做每次擴展都要修改a的點擊函數,不好擴展。

自定義事件的寫法

//1、創建事件var clickElem = new Event("clickElem");//2、注冊事件監聽器elem.addEventListener("clickElem",function(e){  //干點事})//3、觸發事件elem.dispatchEvent(clickElem);

可以看到,elem通過dispatchEvent方法觸發的事件,只有elem上注冊的監聽器才能監聽得到。這就很沒意思了,自己發給自己消息,通知自己去干什么。

創建自定義事件可參考: MDN : Creating_and_triggering_events

應用

從前面 js 自定義事件 的描述中知道:元素A通過dispatchEvent方法觸發的事件,只有A上注冊的監聽器才能監聽得到。

我們想要的效果是,別的對象干了某件事之后, 發個消息給我們,好讓我們能做相應的改變。要做到這樣,也不是沒辦法:我們可以在一個公共對象上監聽和觸發事件,這就很有意義了。

例子一:通知多個對象

要實現 元素A點擊之后,元素B顯示鼠標的位置,元素C顯示提示,可以這樣寫:

文件:a.js

import b from "./b"import c from "./c"var a = document.getElementById("a");a.addEventListener("click",function(e){  var clickA = new Event("clickA");  document.dispatchEvent(clickA);});

注意:import進來的變量雖然不使用,但是一定不能省略

文件b.js:

var b = document.getElementById("b");document.addEventListener("clickA",function(e){  b.innerHTML = "(128,345)";})

文件c.js:

var c = document.getElementById("c");document.addEventListener("clickA",function(e){  c.innerHTML = "你點了A";})            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 浦县| 修武县| 神木县| 桦甸市| 梓潼县| 虎林市| 吴川市| 都江堰市| 盐边县| 视频| 揭西县| 塔城市| 中西区| 乌拉特前旗| 怀化市| 廉江市| 郯城县| 阜新市| 黔西| 峡江县| 文成县| 湖北省| 斗六市| 莒南县| 休宁县| 江津市| 秀山| 阿勒泰市| 阳高县| 旬阳县| 樟树市| 洛宁县| 靖西县| 张家港市| 沧州市| 翁源县| 仙桃市| 内乡县| 石台县| 沧州市| 来宾市|