zoukankan      html  css  js  c++  java
  • 自定义事件javascript

     自定义事件

    1、event构造函数自定义事件

    /*
    * 自定义一个名为build的事件
    * bubbles :事件是否冒泡
    * cancelable:是否阻止事件的默认操作
    * composed:指示事件是否将触发影子根外部的侦听器
    */
    var
    buildEvent = new Event('build',{"bubbles":true, "cancelable":false,"composed":false});
    //监听自定义定义的build事件   elem=getElemntById("xx").addEventListener()或者document.addEventListener()
    elem.addEventListener('build', function (e) {
    /* 类似elem.onclick */
    }, false); //手动触发事件,自定义的浏览器是捕获不到的需要用下面的代码手动触发 elem.dispatchEvent(buildEvent);

     2、CustomEvent()自定义事件

    为了向事件对象添加更多数据,存在CustomEvent接口,并且可以使用详细信息属性传递自定义数据。 例如,可以如下创建事件

    var event = new CustomEvent('build', { detail: elem.dataset.time });

    面的代码允许你在事件监听器中访问更多的数据:

    function eventHandler(e) {
      log('The time is: ' + e.detail);
    }

    例子:

    obj=document.querySelector('form')
    
    // 可以监听为定义的事件,我们在后面补上就行
    obj.addEventListener("cat", function(e) { process(e.detail) });
     
    // 创建自定义事件
    var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}});
    //手动触发事件
    obj.dispatchEvent(event);

    模拟鼠标点击事件

      <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>simulate click</title>
    </head>
    <body>
      <input type="button" value="clickMe" id="demo_click">
      <script>
          
          const btn = document.getElementById('demo_click');
          btn.onclick = function () { //
            alert('click complete!');
          };
          simulateClick();
        // 2. 模拟 浏览器的鼠标点击事件
        // 2.1 可以触发 onclick 事件(先触发)
        // 2.2 可以触发 addEventListener 事件(后触发)
        // 2.3 jQuery 的事件绑定底层就是 addEventListener ,
          function simulateClick() { // 模拟 浏览器的鼠标点击事件
            const event = new MouseEvent('click', {
              view: window,
              bubbles: true,
              cancelable: true
            });
            btn.dispatchEvent(event);      
          }
      </script>
    </body>
    </html>

     或者

    var e = document.createEvent("MouseEvents");
    e.initEvent("click", true, true);
    document.getElementById("clickme").dispatchEvent(e); //只要id 就好  
    
    
    或者
    var obj = document.getElementById("obj");
    
    //obj元素上绑定click事件
    obj.addEventListener('click', function (event) {
    alert(event.eventType);
    }, false);
    
    var event1 = document.createEvent('HTMLEvents');
    event1.initEvent("click", true, true);
    event1.eventType = 'message';
    
    //触发obj元素上绑定click事件
    obj.dispatchEvent(event1);

     IE<9为fireEvent方法

    //document上绑定自定义事件ondataavailable
    document.attachEvent('ondataavailable', function (event) {
       alert(event.eventType);
    });
    var obj=document.getElementById("obj");
    
    //obj元素上绑定click事件
    obj.attachEvent('onclick', function (event) {
       alert(event.eventType);
    });
    
    //调用document对象的createEventObject方法得到一个event的对象实例。
    var event = document.createEventObject();
    event.eventType = 'message';
    
    //触发document上绑定的自定义事件ondataavailable
    document.fireEvent('ondataavailable', event);
    
    //触发obj元素上绑定click事件
    document.getElementById("test").onclick = function () {
       obj.fireEvent('onclick', event);
    };

    3、废弃的旧方法

    // Create the event.
    var event = document.createEvent('Event');
    
    // Define that the event name is 'build'.
    event.initEvent('build', true, true);
    
    // Listen for the event.
    elem.addEventListener('build', function (e) {
      // e.target matches elem
    }, false);
    
    // target can be any Element or other EventTarget.
    elem.dispatchEvent(event);
  • 相关阅读:
    HDU 3853:LOOPS(概率DP)
    HDU 4405:Aeroplane chess(概率DP入门)
    中国剩余定理模板
    HDU 5768:Lucky7(中国剩余定理 + 容斥原理)
    欧几里得和拓展欧几里得模板
    HDU 5025:Saving Tang Monk(BFS + 状压)
    HDU 1728:逃离迷宫(BFS)
    HDU 5795:A Simple Nim(博弈)
    HDU 5724:Chess(博弈 + 状压)
    HDU 5818:Joint Stacks(stack + deque)
  • 原文地址:https://www.cnblogs.com/lichihua/p/11691305.html
Copyright © 2011-2022 走看看