2022-01-19 day13 事件流+默认行为+事件监听

一. 事件流

1. 事件流
  • 事件接收的顺序(冒泡, 捕获)
  • 冒泡: 从内到外
  • 捕获: 从外到内
2. 事件的三个阶段
  • 冒泡(默认)
  • 目标
  • 捕获
3. 阻止冒泡
  • e.stopPropagation() 非ie
  • e.cancelBubble = true; ie
  • 兼容写法:
// 兼容写法
if (e.stopPropagation) {
   e.stopPropagation();
} else {
   e.cancelBubble = true;
}
4. 捕获
  • 默认冒泡(false)
  • 格式: addEventListener("事件", function(){}, {capture: true/false,once: true/false})
    *capture 捕获方式(true: 捕获, false: 冒泡)
    *once: true 只能点击一次
oBtn.addEventListener("click", function() {
  console.log('oBtn');
  }, {capture: true, once: true}
);

二. 默认行为

1. 默认行为
  • a标签, 默认有跳转的行为
  • 表单form默认有提交行为
  • 右击菜单默认oncontextmenu
  • 图片默认可以拖曳
  • 默认按 ctrl + shift + r 是刷新
2. 阻止默认行为
  • return false; 表单
  • 在img标签上写: ondragstart = "return false" 防止图片拖曳
  • e.returnValue = false; ie
  • e.preventDefault(); 非ie
  • 兼容写法:
// 兼容写法
if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

三. 事件监听

  1. addEventListener("事件", func) 添加监听事件
  2. removeEventListener("事件", func) 移除监听事件
    *这里的事件不需要加 'on'
    *func使用的是外部函数,注意不用加小括号
    *能绑定多次事件
    注意: 添加事件与移除事件,必须是同一个函数,才有效
<body>
    <button class="add">监听事件</button>
    <button class="remove">移除事件</button>
    <div class="box"></div>
</body>
<script>
    var oBox = document.querySelector('.box');
    var oAdd = document.querySelector('.add');
    var oRemove = document.querySelector('.remove');
    // 1) 添加监听事件
    oAdd.onclick = function() {
        oBox.addEventListener('click', fun);
    };
    // 2) 移除监听事件
    oRemove.onclick = function() {
        oBox.removeEventListener('click', fun);
    };
    // 3) 添加与移除的监听事件必须是同一个函数,才有效
    function fun() {
        console.log('哈哈哈哈哈');
    }
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容