美文网首页
《DOM事件探秘》笔记

《DOM事件探秘》笔记

作者: 8eeb5fce5842 | 来源:发表于2016-03-10 12:27 被阅读52次

慕课网 DOM事件探秘 学习笔记

一、事件流

  • 时间流: 描述的是从页面中接收事件的顺序。分为事件冒泡流和事件捕获流。

事件冒泡

  • 事件冒泡: 即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档)。

事件捕获

  • 事件捕获: 不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。

二、事件处理程序

HTML 事件处理程序

  • 即事件是直接加载HTML结构里的。
<div onclick="xxx"></div>

DOM0级 事件处理程序

  • 传统:把一个函数赋值给一个事件的处理程序属性。
oDiv.onclick = function () {}; // 给oDiv加了一个点击的属性
oDiv.onclick = null; // 删除onclick属性

DOM2级 事件处理程序

  • DOM2级事件定义了两个方法:(用于处理指定和删除事件处理程序的操作)
    • addEventListener()removeEventListener()
    • 接收三个参数:要处理的事件名、作为事件处理程序的函数、布尔值(true表示在捕获阶段调用事件处理程序,false为在冒泡阶段调用)。 - 参数的事件不带on,如click,mouseover
    • 添加和删除时的参数得相同。
    • addEventListener加的事件,只能通过removeEventListener删除。
    • 非标IE不支持。

IE事件处理程序

  • attachEvent() 添加事件
  • detachEvent() 删除事件
  • 接受两个参数:事件处理程序的名称和事件处理程序的函数(只支持事件冒泡)。

三、事件对象

  • 在触发DOM上的事件时都会产生一个事件对象event。其包含了所有和事件有关的信息。
  • 非IE:event, IE:window.event

DOM中的事件对象

  • type属性 :用于获取事件类型。
  • target属性 : 用于获取事件目标。
  • stopPropagation()方法 : 用于阻止事件冒泡。
  • preventDefault()方法 : 用于阻止事件的默认行为。

IE中的事件对象

  • type 和DOM一样。
  • srcElement属性 : 用于获取事件目标。
  • cancelBubble属性 : 用于阻止事件冒泡,设置为true表示阻止冒泡,false表示不阻止冒泡。
  • returnValue属性 : 用于阻止事件的默认行为,设置为false表示阻止事件的默认行为。

四、跨浏览器兼容

var eventUtil = {
 // 添加事件
 addHandler: function (element, eventType, handler) {
 if(element.addEventListener) { // DOM2
 element.addEventListener(eventType, handler, false);
 }
 else if(element.attachEvent) { // IE
 element.attachEvent('on' + eventType, handler);
 }
 else { // DOM0
 element['on' + eventType] = handler;
 }
 },
 // 删除事件
 removeHandler: function (element, eventType, handler) {
 if(element.removeEventListener) {
 element.removeEventListener(eventType, handler, false);
 }
 else if(element.detachEvent) {
 element.detachEvent('on' + eventType, handler);
 }
 else {
 element['on' + eventType] = null;
 }
 },
 // 事件对象
 getEvent: function (event) {
 return event ? event :window.event;
 },
 // 事件类型
 getType: function (event) {
 return event.type;
 },
 // 事件目标
 getElement: function (event) {
 return event.target || event.srcElement;
 },
 // 阻止默认行为
 preventDefault: function (event) {
 if(event.preventDefault) {
 event.preventDefault();
 }
 else {
 event.returnValue = false;
 }
 },
 // 阻止事件冒泡
 stopPropagation: function (event) {
 if(event.stopPropagation) {
 event.stopPropagation();
 }
 else {
 event.cancelBubble = true;
 }
 }
};

// 使用时
eventUtil.addHandler(oDiv, 'click', function (ev) {
 ev = eventUtil.getEvent(ev); // 事件对象
 // 或者就直接写 ev = ev || window.event;
 alert(eventUtil.getElement(ev)); // 弹出目标元素
 eventUtil.preventDefault(ev); // 阻止默认行为
 eventUtil.stopPropagation(ev); // 阻止冒泡
});


相关文章

  • 《DOM事件探秘》笔记

    慕课网 DOM事件探秘 学习笔记 一、事件流 时间流: 描述的是从页面中接收事件的顺序。分为事件冒泡流和事件捕获流...

  • DOM事件探秘(2)事件类型

    DOM有不同的事件类型,按大类分有鼠标事件,键盘事件。根据《DOM事件探秘》文章,我们来做几个综合实例。 鼠标事件...

  • DOM事件探秘

    JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、浏览器...

  • DOM事件探秘(一)

    DOM事件学习,事件流、事件处理程序和事件对象 1.事件流 从页面中接收事件的顺序 IE:事件冒泡流即事件最开始由...

  • DOM 事件流

    这篇笔记主要简述下 DOM 事件流 - DOM Event Flow. 用于理解事件捕获与冒泡. 什么是事件 事件...

  • 5.29-14

    DOM事件探秘(能力检测:通过代码检测浏览器能支持哪一种就用对应的哪一种) 事件流分为两种:事件冒泡、事件捕获。事...

  • 五月(19)

    今天是2022年5月19日, 探秘旅行的第19天。 探秘之行: 成就事件: 1. 上课、改作业、阅读、写笔记、读书...

  • 前端工程师之DOM编程艺术(持续更新)

    @(书籍阅读)[网易云课堂|DOM] DOM编程艺术 网易前端微专业之《DOM编程艺术》笔记,持续更新; 更新事件...

  • DOM事件笔记

    点击别处关闭浮层 1.阻止事件传播(stopPropagation) 阻止冒泡,不通知父级元素代码(documen...

  • 五月(14)

    今天是2022年5月14日,探秘之旅的第14天。 探秘之行: 成就事件:1. 写社群学习笔记3小时;2. 读完《吸...

网友评论

      本文标题:《DOM事件探秘》笔记

      本文链接:https://www.haomeiwen.com/subject/zfetlttx.html