美文网首页
dom 自定义事件

dom 自定义事件

作者: 菜鸡前端 | 来源:发表于2021-10-01 09:22 被阅读0次

自定义事件虽然用的不多,但是理解他有助于理解事件绑定的原理,本质上是基于 EventTarget,系统已经内置比较完善的事件类型,比如:

EventTarget 实现也是比较简单的:

var EventTarget = function() {
  this.listeners = {};
};

EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    this.listeners[type] = [];
  }
  this.listeners[type].push(callback);
};

EventTarget.prototype.removeEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    return;
  }
  var stack = this.listeners[type];
  for (var i = 0, l = stack.length; i < l; i++) {
    if (stack[i] === callback){
      stack.splice(i, 1);
      return;
    }
  }
};

EventTarget.prototype.dispatchEvent = function(event) {
  if (!(event.type in this.listeners)) {
    return true;
  }
  var stack = this.listeners[event.type].slice();

  for (var i = 0, l = stack.length; i < l; i++) {
    stack[i].call(this, event);
  }
  return !event.defaultPrevented;
};

1. 预备知识

2. 代码演示

// 创建事件
var event = document.createEvent('Event');

// 定义事件名为'build'.
event.initEvent('build', true, true);

// 监听事件
elem.addEventListener('build', function (e) {
  // e.target matches elem
}, false);

// 触发对象可以是任何元素或其他事件目标
elem.dispatchEvent(event);

推荐使用下面的方式来创建 Event 对象:

// 创建一个支持冒泡且不能被取消的look事件
var ev = new Event("look", {"bubbles":true, "cancelable":false});
document.dispatchEvent(ev);

// 事件可以在任何元素触发,不仅仅是document
myDiv.dispatchEvent(ev);

下面是下载文件的例子:

// 下载文件
export function download(href, name) {
  const a = document.createElement('a');
  a.href = href;
  a.download = name; // 设置下载文件名

  const e = document.createEvent('MouseEvents');
  e.initEvent('click', false, false);

  a.dispatchEvent(e);
}

相关文章

  • DOM事件

    DOM事件的级别 DOM事件模型 DOM事件流 描述DOM时间捕获的具体流程 Event对象的常见应用 自定义事件...

  • DOM事件

    基本概念 DOM事件类型 DOM事件流 DOM事件捕获的具体流程 Event对象的常见应用 自定义事件

  • 前端知识点之DOM 事件类

    知识点:--DOM 事件的级别--DOM 事件模型和事件流--Event 对象的常见应用--自定义事件 DOM 事...

  • 伪dom 自定义事件

    1.Q:伪dom 自定义事件 A:

  • DOM事件与事件委托

    Get Started DOM事件○ 标准○ 术语○ addEventListener○ 取消冒泡○ 自定义事件 ...

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

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

  • jQuery(事件)

    DOM事件 表单事件 键盘事件 事件的绑定和解绑 事件对象的使用 自定义事件

  • 自定义事件深入

    1.原生dom绑定系统事件 2.非原生dom绑定自定义事件 Event组件:Event非原生DOM节点,而绑定的c...

  • 1.事件绑定

    被绑定的事件可以是标准的dom事件,也可以是任意的自定义事件。

  • JavaScript 自定义事件(二)——Dom事件

    上一次,我们一起了解了JS自定义事件。今天在DOM上进行事件方法扩展。 1.基于DOM扩展自定义方法(了解即可) ...

网友评论

      本文标题:dom 自定义事件

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