定义事件
之前知道定义事件,但是没有认真的去学习对应的api及用法。趁着想到了这个知识点,来梳理下。
Event
什么是Event?就是表示在DOM中发生的事件。
我们知道事件可以被用户的鼠标点击的类似操作给触发,也可以通过程序的HTMLElement.click()类似的方式来触发。当然,我们也可以定义事件,然后通过EventTarget.dispatchEvent()来触发。
要创建一个事件,首先可以根据Event构造函数来创建一个事件。
var event = new Event('build');
elem.addEventListener('build', function (e) { /* ... */ }, false);
// 匹配事件.
elem.dispatchEvent(event);这个兼容性也还行,支持大多数的现代性的浏览器,当然了,IE不支持。要想使用IE支持,就要使用后面提到的老式的方法。
添加自定义数据 CustomEvent()
为了添加更多的数据到事件对象,CustomEvent接口有一个detail属性可以传递自定义数据。
我们来试一试:
var event = new CustomEvent('build', { detail: 'xiaohesong' });这样就可以访问一些其他数据了。
老式的方法
老的创建事件的方法是受Java启发产生的API。下面是一个例子:
可以发现,比较啰嗦,但是如果你要做兼容,似乎只能使用这个法子。
值得说一下的是,上面创建的event对象,就是被创建的Event对象。
然后对应创建事件的类型,就是上面那个注意的'Event'参数。
type是表示要创建的事件类型,一个字符串。可能包含的有"UIEvents","MouseEvents", "MutationEvents", 和 "HTMLEvents"。
事件冒泡
有时候我们使用事件冒泡法则来完成事件代理。
来看一个小🌰:
这个小🌰完成下来,是不是感觉也很容易记住的。
动态创建和分派事件
元素可以监听还没有创建的事件,我们来一睹为快。
好吧,还是和之前差不多是不,只是把创建事件放在了dispatchEvent上面而已;
触发内置事件
来吧,直接看一个🌰,吃了它:
小问:看到上面对于
CustomEvent,也可以传递第二个参数,你有没有想过,他可不可以传递detail?试试呗?然后发现,不可以哦。好吧,如果你有这个疑问,那就说明你忘了仔细看上面说的CustomEvent上有个detail属性了。
参考:
Last updated