js customEvent 创建和触发自定义事件

 

在日常的 Web 开发中,我们经常与内置的浏览器事件互动,例如 click、input 和 submit。但有时,我们可能希望在特定情境下创建并触发自己的事件。这时,CustomEvent 就派上了用场。

基本用法

// 使用 new CustomEvent 创建一个自定义事件
const myEvent = new CustomEvent('myCustomEvent', {
    message: 'hello'
});
// 这里,'myCustomEvent' 是你的自定义事件名称,
// 而 'detail' 属性则包含你想传递给事件监听器的额外数据。

// 使用 dispatchEvent 方法触发自定义事件
document.dispatchEvent(myEvent);

document.addEventListener('myCustomEvent', function(e) {
    console.log(e.message);  // 输出: "hello"
});

浏览器兼容

CustomEvent 的兼容性 虽然 CustomEvent 在大多数现代浏览器中都得到了很好的支持,但在某些旧版本的浏览器中,例如 Internet Explorer,可能需要一些额外的处理来支持这个功能。
CustomEvent 构造函数在主流现代浏览器中是兼容的:

Chrome: 自 Chrome 15 版本开始支持。
Firefox: 自 Firefox 6 版本开始支持。
Safari: 自 Safari 6 版本开始支持。
Edge: 自 Edge 12 版本开始支持。
Internet Explorer: 不支持 CustomEvent 构造函数。但可以通过使用其他方法模拟自定义事件,或者使用一些 polyfill 库来提供支持。

处理兼容 CustomEvent polyfill

// 为那些不支持 CustomEvent 构造函数的浏览器添加一个简单的 polyfill
(function () {
    if (typeof window.CustomEvent === "function") return false;
    function CustomEvent(event, params) {
        params = params || { bubbles: false, cancelable: false, detail: null };
        var evt = document.createEvent('CustomEvent');
        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
        return evt;
    }

CustomEvent.prototype = window.Event.prototype;

window.CustomEvent = CustomEvent;
})();

如果你想要更全面的解决方案,可以考虑使用像 polyfill.io 这样的服务。

 

posted on 2023-09-12 00:36  完美前端  阅读(1083)  评论(0)    收藏  举报

导航