真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用javascript實(shí)現(xiàn)自定義事件功能

這篇文章主要介紹“怎么用javascript實(shí)現(xiàn)自定義事件功能”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“怎么用javascript實(shí)現(xiàn)自定義事件功能”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)公司是專業(yè)的河西網(wǎng)站建設(shè)公司,河西接單;提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行河西網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

概述

自定義事件很難派上用場(chǎng)?

為什么自定義事件很難派上用場(chǎng),因?yàn)橐郧癹s不是模塊化開發(fā),也很少協(xié)作。因?yàn)槭录举|(zhì)是一種通信方式,是一種消息,只有存在多個(gè)對(duì)象,多個(gè)模塊的情況下,才有可能需要用到事件進(jìn)行通信。而現(xiàn)在有了模塊化之后,已經(jīng)可以使用自定義事件進(jìn)行各模塊間協(xié)作了。

哪里用得到自定義事件?

事件本質(zhì)是一種消息,事件模式本質(zhì)上是觀察者模式的實(shí)現(xiàn),那么用得上觀察者模式的地方,自然也可以也可以用上事件模式。所以,如果:

1、一個(gè)目標(biāo)對(duì)象改變,需要多個(gè)觀察者調(diào)整自身的。

比如:我需要元素A點(diǎn)擊之后,元素B顯示鼠標(biāo)的位置,元素C顯示提示,元素D.....

2、分模塊協(xié)作需要解耦的

比如:甲負(fù)責(zé)模塊A,乙負(fù)責(zé)模塊B,模塊B需要A運(yùn)行完之后才能運(yùn)行

傳統(tǒng)的寫法將邏輯寫在一個(gè)方法里面:

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

這樣做每次擴(kuò)展都要修改a的點(diǎn)擊函數(shù),不好擴(kuò)展。

自定義事件的寫法

//1、創(chuàng)建事件
var clickElem = new Event("clickElem");
//2、注冊(cè)事件監(jiān)聽器
elem.addEventListener("clickElem",function(e){
  //干點(diǎn)事
})
//3、觸發(fā)事件
elem.dispatchEvent(clickElem);

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

創(chuàng)建自定義事件可參考: MDN : Creating_and_triggering_events

應(yīng)用

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

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

例子一:通知多個(gè)對(duì)象

要實(shí)現(xiàn) 元素A點(diǎn)擊之后,元素B顯示鼠標(biāo)的位置,元素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進(jìn)來(lái)的變量雖然不使用,但是一定不能省略

文件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 = "你點(diǎn)了A";
})

這樣寫,三個(gè)模塊之間完全不用關(guān)心對(duì)象,也不知道對(duì)方存在,耦合度非常的低,完全可以獨(dú)立編寫,不會(huì)互相影響。這其實(shí)就是一個(gè)觀察者模式的實(shí)現(xiàn)。

例子二:游戲框架

要開發(fā)一個(gè)游戲,啟動(dòng)游戲,加載圖片和音樂,加載完后,渲染場(chǎng)景和音效,加載和渲染由不同的人負(fù)責(zé)。可以這樣寫:

文件:index.js

import loadImage from "./loadImage"
import loadMusic from "./loadMusic"
import initScene from "./initScene"  
var start = document.getElementById("start");
start.addEventListener("click",function(e){
  console.log("游戲開始!");
  document.dispatchEvent(new Event("gameStart"));
})

文件:loadImage.js

// 加載圖片
document.addEventListener("gameStart",function(){
  console.log("加載圖片...");
  setTimeout(function(){
    console.log("加載圖片完成");
    document.dispatchEvent(new Event("loadImageSuccess"));
  },1000);
});

文件:loadMusic.js

//加載音樂
document.addEventListener("gameStart",function(){
  console.log("加載音樂...");
  setTimeout(function(){
    console.log("加載音樂完成");
    document.dispatchEvent(new Event("loadMusicSuccess"));
  },2000);
});

文件:initScene.js

//渲染場(chǎng)景
document.addEventListener("loadImageSuccess",function(e){
  console.log("使用圖片創(chuàng)建場(chǎng)景...");
  setTimeout(function(){
    console.log("創(chuàng)建場(chǎng)景完成");
  },2000)
});
//渲染音效
document.addEventListener("loadMusicSuccess",function(e){
  console.log("使用音樂創(chuàng)建音效...");
  setTimeout(function(){
    console.log("創(chuàng)建音效完成");
  },500)
});

加載模塊和渲染模塊互不影響,易于擴(kuò)展。

攜帶信息

除此之外,事件還能傳遞自定義信息:

var event = new CustomEvent('myEvent', { 'dataName': dataContent });
document.dispatchEvent(event);

(注意:傳遞自定義信息需要使用CustomEvent,而不是Event)

然后在監(jiān)聽函數(shù)里取出:

document.addEventListener("myEvent",function(e){
  console.log(e.dataName);
})

關(guān)于“怎么用javascript實(shí)現(xiàn)自定義事件功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。


網(wǎng)站題目:怎么用javascript實(shí)現(xiàn)自定義事件功能
文章URL:http://weahome.cn/article/popepc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部