• js 事件 码农


    一、EventTarget 接口
    事件是程序各个组成部分之间的一种通信方式,DOM 节点的事件操作(监听和触发),都定义在EventTarget接口
    addEventListener():绑定事件的监听函数
    removeEventListener():移除事件的监听函数
    dispatchEvent():触发事件

    useCapture:布尔值,如果设为true,表示监听函数将在捕获阶段(capture)触发(参见后文《事件的传播》部分)。该参数可选,默认值为false(监听函数只在冒泡阶段被触发)。

    二、事件的传播

    1:捕获阶段(capture phase)
    2:目标阶段(target phase)
    3:冒泡阶段(bubbling phase)

    <div>
    <p>click</p>
    </div>
    
    <script>
    var phases = {
    1: 'capture',
    2: 'target',
    3: 'bubble'
    };
    
    var div = document.querySelector('div');
    var p = document.querySelector('p');
    
    
    div.addEventListener('click', callback, true);
    div.addEventListener('click', callback, false);
    p.addEventListener('click', callback, true);
    p.addEventListener('click', callback, false);
    
     
    
    
    function callback(event) {
    var tag = event.currentTarget.tagName;
    var phase = phases[event.eventPhase];
    
    console.log("Tag: '" + tag + "'. EventPhase: '" + phase + "'. event.eventPhase:"+event.eventPhase);
    }
    
    </script>
    

      

    Tag: 'DIV'. EventPhase: 'capture'. event.eventPhase:1
    Tag: 'P'. EventPhase: 'target'. event.eventPhase:2
    Tag: 'DIV'. EventPhase: 'bubble'. event.eventPhase:3

    三、事件的代理
    事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件

    var ul = document.querySelector('ul');
    
    ul.addEventListener('click', function (event) {
    if (event.target.tagName.toLowerCase() === 'li') {
    // some code
    }
    });
    

    // 事件传播到 p 元素后,就不再向下传播了

    p.addEventListener('click', function (event) {
    event.stopPropagation();
    // event.stopImmediatePropagation();//彻底取消该事件,不再触发后面所有click的监听函数
    }, true);

    四、Event 对象
    event = new Event(type, options);
    bubbles:布尔值,可选,默认为false,表示事件对象是否冒泡

    var ev = new Event(
    'look',
    {
    'bubbles': true,
    'cancelable': false
    }
    );

    var click = new Event('click');
    p.dispatchEvent(click);

    Event.target:原始触发节点
    Event.currentTarget:当前正在通过的节点, 等同于监听函数内部的this

    Event.type:返回一个字符串,表示事件类型

    Event.preventDefault:方法取消浏览器对当前事件的默认行为

    event.stopPropagation():方法阻止事件在 DOM 中继续传播

  • 相关阅读:
    我使用的Chrome插件列表
    从花式swap引出的pointer aliasing问题
    CF Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组
    CF #335 div1 A. Sorting Railway Cars
    Mac 下载安装MySQL
    Mac 安装Tomcat
    CF #CROC 2016
    安全体系(零)—— 加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
    安全体系(一)—— DES算法详解
    JAVA实现用户的权限管理
  • 原文地址:https://www.cnblogs.com/dming4/p/16279619.html
Copyright © 2020-2023  润新知