激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|Jquery|angularjs|React|json|js教程|

香港云服务器
服務(wù)器之家 - 編程語言 - JavaScript - js教程 - js事件模型與自定義事件實(shí)例解析

js事件模型與自定義事件實(shí)例解析

2021-12-15 13:30caihg js教程

JavaScript一個(gè)最簡單的事件模型,需要有事件綁定與觸發(fā),還有事件刪除。本文將對其具體實(shí)現(xiàn)代碼進(jìn)行解析,需要的朋友一起來看下吧

JavaScript 一個(gè)最簡單的事件模型,需要有事件綁定與觸發(fā),還有事件刪除。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var eventModel = {
 list: {},
 bind: function () {
 var args = [].slice.call(arguments),
 type = args[0],
 handlers = args.slice(1);
 if (typeof type === 'string' && handlers.length > 0) {
  for (var i = 0; i < handlers.length; i++) {
  if (typeof handlers[i] === 'function') {
   if (!this.list[type]) {
   this.list[type] = [];
   }
   this.list[type].push(handlers[i]);
  }
  }
 }
 },
 unbind: function () {
 var type = arguments[0],
 handlers = Array.prototype.slice.call(arguments, 1);
 if (typeof type === 'string') {
  if (handlers.length === 0) {
  this.list[type] = [];
  } else {
  for (var i = 0; i < handlers.length; i++) {
   if (typeof handlers[i] === 'function' && handlers[i] === this.list[type][i]) {
   this.list[type].splice(i, 1);
   }
  }
  }
 }
 },
 trigger: function () {
 var arguments = [].slice.call(arguments),
 type = arguments[0],
 args = arguments[1] instanceof Array && !arguments[2] ? arguments[1] : arguments.slice(1),
 handlers = this.list[type];
 for (var i = 0; i < handlers.length; i++) {
  handlers[i].apply(this, args.splice(0, handlers[i].length));
 }
 }
};

其中主要實(shí)現(xiàn)了bind(綁定事件)、unbind(刪除事件)與 trigger (觸發(fā)事件)。對同一事件名稱,可以綁定多個(gè)事件處理函數(shù);并按照綁定的順序依次觸發(fā)。

args.splice(0, handlers[i].length) 觸發(fā)時(shí)的傳參

事件綁定與觸發(fā):

?
1
2
3
4
5
6
7
8
9
10
11
eventModel.bind('myevent1', function (a) {
 console.log(a); // 1
}, function(b) {
 console.log(b); // 2
}, function(c, d) {
 console.log(c + ' + ' + d); // a + b
});
eventModel.bind('myevent1', function (e) {
 console.log(e); // 50
});
eventModel.trigger('myevent1', 1,2,'a','b', 50);

事件刪除:

?
1
2
<button id="bind">bind</button>
<button id="unbind">unbind</button>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var fnX = function () {
 console.log('fnX');
}
var fnY = function () {
 console.log('fnY');
}
eventModel.bind('myevent2', fnX, fnY);
document.getElementById('unbind').onclick = function () {
 eventModel.unbind('myevent2', fnX); //刪除 fnX 后,只剩下 fnY
};
document.getElementById('bind').onclick = function () {
 eventModel.trigger('myevent2'); //輸出 fnX fnY
 //在點(diǎn)擊unbind后,只輸出 fnY
};

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持服務(wù)器之家!

原文鏈接:http://www.cnblogs.com/caihg/p/5227139.html

延伸 · 閱讀

精彩推薦
  • js教程js事件模型與自定義事件實(shí)例解析

    js事件模型與自定義事件實(shí)例解析

    JavaScript一個(gè)最簡單的事件模型,需要有事件綁定與觸發(fā),還有事件刪除。本文將對其具體實(shí)現(xiàn)代碼進(jìn)行解析,需要的朋友一起來看下吧...

    caihg5472021-12-15
  • js教程JavaScript中arguments的使用方法詳解

    JavaScript中arguments的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript中arguments的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的...

    等待的L先生3492021-12-15
  • js教程javascript的事件描述

    javascript的事件描述

    本文主要為大家介紹javascript事件的基礎(chǔ)知識,有需要的朋友可以參考下...

    js教程網(wǎng)9342021-12-15
  • js教程Javascript實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的終極方案

    Javascript實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的終極方案

    網(wǎng)上關(guān)于JS實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的文章很多,但是比較雜亂,有的不支持多音字、不支持聲調(diào)或者字典文件太大,無法根據(jù)實(shí)際需要滿足需求。這篇文章給...

    我是小茗同學(xué)9972021-12-15
639
主站蜘蛛池模板: 成人免费久久网 | 中文字幕一区2区 | 中文字幕在线观看精品 | av在线官网 | 欧美极品欧美精品欧美视频 | 黄色男女视频 | 久久久aa | 久久成人在线观看 | 色悠悠久久久久 | 国产wwww| 成人在线视频精品 | 有一婷婷色 | 欧美在线观看视频一区 | 强伦女教师视频 | 亚洲第九十九页 | 一区二区三区欧美在线观看 | 成人免费自拍视频 | 国产精品一区二区视频 | 欧美性猛交xxx乱大交3蜜桃 | 欧美1—12sexvideos | 撅高 自己扒开 调教 | 精品午夜久久 | 国产成人午夜高潮毛片 | 久久久久久久高清 | 黄色三级网站 | 爽爽淫人综合网网站 | 亚洲一二三久久 | 黄色午夜剧场 | h色网站在线观看 | 羞羞视频免费观看入口 | av免费在线观看av | 色交视频 | 国产伊人色 | 黄色免费网站在线播放 | 中文字幕欧美亚洲 | 久久精精品 | 久久国产28 | av性色全交蜜桃成熟时 | 毛片在哪里看 | 一区二区三区四区高清视频 | 国产一区二区在线观看视频 |