zoukankan      html  css  js  c++  java
  • JS中自定义事件的使用与触发

    1. 事件的创建

    JS中,最简单的创建事件方法,是使用Event构造器:

    var myEvent = new Event('event_name');

    但是为了能够传递数据,就需要使用 CustomEvent 构造器:

    var myEvent = new CustomEvent('event_name', {
        detail:{
            // 将需要传递的数据写在detail中,以便在EventListener中获取
            // 数据将会在event.detail中得到
        },
    });

    2. 事件的监听

    JS的EventListener是根据事件的名称来进行监听的,比如我们在上文中已经创建了一个名称为‘event_name’ 的事件,那么当某个元素需要监听它的时候,就需要创建相应的监听器:

    //假设listener注册在window对象上
    window.addEventListener('event_name', function(event){
        // 如果是CustomEvent,传入的数据在event.detail中
        console.log('得到数据为:', event.detail);
    
        // ...后续相关操作
    });

    至此,window对象上就有了对‘event_name’ 这个事件的监听器,当window上触发这个事件的时候,相关的callback就会执行。

    3. 事件的触发

    对于一些内置(built-in)的事件,通常都是有一些操作去做触发,比如鼠标单击对应MouseEvent的click事件,利用鼠标(ctrl+滚轮上下)去放大缩小页面对应WheelEvent的resize事件。
    然而,自定义的事件由于不是JS内置的事件,所以我们需要在JS代码中去显式地触发它。方法是使用 dispatchEvent 去触发(IE8低版本兼容,使用fireEvent):

    // 首先需要提前定义好事件,并且注册相关的EventListener
    var myEvent = new CustomEvent('event_name', { 
        detail: { title: 'This is title!'},
    });
    window.addEventListener('event_name', function(event){
        console.log('得到标题为:', event.detail.title);
    });
    // 随后在对应的元素上触发该事件
    if(window.dispatchEvent) {  
        window.dispatchEvent(myEvent);
    } else {
        window.fireEvent(myEvent);
    }
    // 根据listener中的callback函数定义,应当会在console中输出 "得到标题为: This is title!"

    4.完整测试示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id ="content"> </div>
        <script>
            var ele = document.getElementById("content");
            
            // 无参数事件
            var myEvent = new Event('event_name');
            
            // 首先定义好事件,并且注册相关的EventListener
            var myEvent = new CustomEvent('event_name', { 
                detail: { title: '这里是触发事件的回调信息!'},
            });
            window.addEventListener('event_name', function(event){
                ele.innerHTML = event.detail.title;
            });
            // 随后在对应的元素上触发该事件
            if(window.dispatchEvent) {  
                window.dispatchEvent(myEvent);
            } else {
                window.fireEvent(myEvent);
            }
            // 根据listener中的callback函数定义,应当会在content中输出 "这里是触发事件的回调信息!"
        </script>
    </body>
    </html>
     
  • 相关阅读:
    上机练习3
    上机练习2
    上机练习1
    第一次作业
    第二次作业
    第一次作业
    第二次作业(4)
    第二次作业(3)
    第二次作业(2)
    第二次作业(1)
  • 原文地址:https://www.cnblogs.com/boonya/p/13948990.html
Copyright © 2011-2022 走看看