美文网首页
js 自定义事件

js 自定义事件

作者: 木木_bfe8 | 来源:发表于2018-07-07 15:27 被阅读0次
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta charset="UTF-8"/>
        <link rel="stylesheet" type="text/css" href="test.css"/>
    </head>
    <body>
    
    </body>
<script type="text/javascript">
//自定义事件构造函数
function EventTarget(){
  //事件处理程序数组集合
  this.handlers = {};
}
//自定义事件的原型对象
EventTarget.prototype = {
  //设置原型构造函数链
  constructor: EventTarget,
  //注册给定类型的事件处理程序,
  //type -> 自定义事件类型, handler -> 自定义事件回调函数
  addEvent: function(type, handler){
    //判断事件处理数组是否有该类型事件
    if(typeof this.handlers[type] == 'undefined'){
      this.handlers[type] = [];
    }
    //将处理事件push到事件处理数组里面
    this.handlers[type].push(handler);
  },
  //触发一个事件
  //event -> 为一个js对象,属性中至少包含type属性,{type: "MY",args:"args",handler:"testEvenB",}
  //因为类型是必须的,其次可以传一些处理函数需要的其他变量参数。(这也是为什么要传js对象的原因)
  fireEvent: function(event){
    //模拟真实事件的event
    if(!event.target){
      event.target = this;
    }
    //判断是否存在该事件类型
    if(this.handlers[event.type] instanceof Array){
      var handlers = this.handlers[event.type];
      //获取当前事件
      current_event = handlers.filter(function(item){return item.name==event.handler});
      console.log(event.args);
      current_event[0]();
    }
  },
  //注销事件
  //type -> 自定义事件类型, handler -> 自定义事件回调函数
  removeEvent: function(type, handler){
    //判断是否存在该事件类型
    if(this.handlers[type] instanceof Array){
      var handlers = this.handlers[type];
      //在同一个事件类型下的可能存在多种处理事件
      for(var i = 0; i < handlers.length; i++){
        //找出本次需要处理的事件下标
        if(handlers[i] == handler){
          break;
        }
      }
      //从事件处理数组里面删除
      handlers.splice(i, 1);
      //如果该类型下处理的事件为空则删除该类型
      if(handlers.length===0){
        delete this.handlers[type];
      }
    }
  }
};
//test

function testEvenA(){
  console.log('hello world MY A');
}

function testEvenB(){
  console.log('hello world MY B');
}

var target = new EventTarget();
target.addEvent("MY", testEvenA);

target.addEvent("MY", testEvenB);
 
target.fireEvent({
  type: "MY",
  args:"args",
  handler:"testEvenB",
});   

console.log(target);

target.removeEvent('MY',testEvenA)

console.log(target);


</script>
</html>

相关文章

  • 自定义事件js

    title: 自定义事件date: 2017-06-06 15:36:04tags: 自定义事件 js的自定义事件...

  • jQuery例子记录(持续更新)

    目录: 1.自定义事件2.操作DOM(与JS原生对比) 1.自定义事件 绑定自定义事件: 事件名称refresh....

  • JS中的事件

    JS中的事件 一:自定义事件 1.使用Event自定义事件 使用Event接口,可以自定义事件。但是该接口无法在事...

  • mitt

    安装 js 引入: 发送mybus.emit('自定义事件名称','数据');接收mybus.on('自定义事件名...

  • Markdown

    touch.js学习 准备工作 引用 touch.js是百度开源的一套支持原生js事件和自定义事件的js库...

  • MarkDown学习

    touch.js学习 准备工作 touch.js是百度开源的一套支持原生js事件和自定义事件的js库js中包含很多...

  • MARKDOWN学习?

    touch.js学习 准备工作 touch.js是百度开源的一套支持原生js事件和自定义事件的js库js中包含很多...

  • touch.js

    touch.js学习 touch.js是百度开源的一套支持原生js事件和自定义事件的js库js中包含很多这种库 封...

  • IFE2017,动态数据绑定(二)学习笔记

    自定义事件 我们知道JS里绑定事件有addEventListener()这个方法。在JS中我们可以这样创建一个自定...

  • MarkDown学习

    touch.js学习 1.准备工作 touch.js是百度开源的一套支持原生js事件和自定义事件的js库js中包含...

网友评论

      本文标题:js 自定义事件

      本文链接:https://www.haomeiwen.com/subject/jwgwuftx.html