JS基本功系列-事件流

简介: 事件流定义:描述从页面中接受事件的顺序,和冒泡、捕获相关微软IE 提出的事件冒泡流(Event Bubbling)网景(Netscape) 提出的事件捕获流(Event Capturing)事件流三个阶段:事件捕获阶段、处理目标阶段、事件冒泡阶段事件冒泡:处理目标阶段 》 事件冒泡阶段事件捕获:事件捕获阶段 》 处理目标阶段

事件流


  • 定义:描述从页面中接受事件的顺序,和冒泡、捕获相关
  • 微软IE 提出的事件冒泡流(Event Bubbling)
  • 网景(Netscape) 提出的事件捕获流(Event Capturing)
  • 事件流三个阶段:事件捕获阶段、处理目标阶段、事件冒泡阶段
  • 事件冒泡:处理目标阶段 》 事件冒泡阶段
  • 事件捕获:事件捕获阶段 》 处理目标阶段


DOM级别对应事件

DOM0 定义 onXXX(onclick) 的两种写法
DOM1 没有定义事件模型
DOM2 
    定义addEventListener(3个参数) -> W3C规范
            removeEventListener
            attachEvent(2个参数)
            detachEvent


事件对象


事件对象(Event对象)e = new MouseEvent();//MouseEvent是构造函数

事件对象里面有很多属性:e: 事件对象(包含了事件源对象) target,srcElement: 事件源对象

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>DOM1</title>
  <style type="text/css">
    .wrapper {
      width: 100px;
      height: 100px;
      background-color: orange;
    }
  </style>
<body>
<div class="wrapper"></div>
<script type="text/javascript">
  var wrapper = document.getElementsByClassName('wrapper')[0];
  wrapper.onclick = function (e) {
    // e 事件触发之后的详细信息
    // Event 对象 = new MouseEvent()
    // IE 保存在 window.event
    var e = e || window.event; // 兼容性
    console.log(e);
    // 事件源对象: target、srcElement
    // 获取事件源:FF 只有target,IE 只有srcElement
    var tar = e.target || e.srcElement; // 兼容性写法
  }
</script>
</body>
</html>


事件委托,事件代理


需求:给li绑定事件,点击哪个li就输出对应的下标

解决:把子元素的事件绑定到父元素上

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>DOM1</title>
  <style type="text/css">
    .wrapper {
      width: 100px;
      height: 100px;
      background-color: orange;
    }
  </style>
<body>
<button>增加li</button>
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
  <li>8</li>
  <li>9</li>
  <li>10</li>
</ul>
<script type="text/javascript">
  var oList = document.getElementsByTagName('ul')[0],
    oBtn = document.getElementsByTagName('button')[0],
    oLi = document.getElementsByTagName('li');
  // 利用冒泡机制的 事件委托
  //点击li之后,就会利用冒泡机制传给上一层的父级(这里是ul),
  // 同时获取相对应的事件对象e,以及事件源对象target
  //点击了li之后,会冒泡给它的父级(ul), ul里面有个事件对象e,
  // 事件对象里面有个属性是事件源对象target------>点击哪个元素,它就指向哪个元素
  oList.onclick = function (e) {
    var e = e || window.event, // 事件兼容性
      tar = e.target || e.srcElement; // 事件源兼容性
    // 获取内容
    console.log(this); // ul..ul
    console.log(tar); // li..li
    console.log(tar.innerText); // li的文本
    // 获取下标,这个是固定的套路,要熟悉!!!
    // Array.prototype.indexOf.call(DOM对象集合, 当前事件源)
    var index = Array.prototype.indexOf.call(oLi, tar);
    console.log(index);
  }
  //增加li
  oBtn.onclick = function () {
    var li = document.createElement('li');
    li.innerText = oLi.length + 1;
    oList.appendChild(li);
  }
</script>
</body>
</html>

目录
相关文章
|
4月前
|
JavaScript 前端开发 UED
JS DOM 事件流与事件冒泡
【10月更文挑战第16天】理解 DOM 事件流和事件冒泡是掌握 JavaScript 事件处理的关键。通过合理利用事件冒泡,可以实现更高效、灵活的事件处理机制,提升用户体验和开发效率。在实际开发中,要根据具体情况灵活运用这些概念,以达到最佳的效果。
114 42
|
6月前
|
JavaScript 前端开发
JavaScript 事件流
JavaScript 事件流
55 1
|
7月前
|
JavaScript
js 事件流、事件冒泡、事件捕获、阻止事件的传播
js 事件流、事件冒泡、事件捕获、阻止事件的传播
108 1
|
9月前
|
JavaScript 前端开发
|
Web App开发 JavaScript 前端开发
JavaScript的事件流1
JavaScript的事件流
88 0
|
9月前
|
JavaScript 前端开发 API
探索JavaScript事件流:DOM中的神奇旅程
JavaScript中的事件流是一种机制,用于描述和处理事件在DOM树中的传播过程。了解事件流的属性和工作原理对于编写高效的事件处理代码和实现复杂的交互功能至关重要。本文将详细介绍JavaScript事件流的发展流程、属性以及应用场景,并提供一些代码示例和引用资料,帮助读者深入理解并应用这一重要的前端技术。
|
JavaScript 前端开发
JavaScript 事件流
JavaScript 事件流
53 0
|
前端开发 JavaScript 开发者
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)
101 0
|
前端开发 JavaScript
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(2)
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(2)
100 0
|
JavaScript 前端开发
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(3)
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(3)

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    52
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62