js高程事件通识篇(2)

栏目: JavaScript · 发布时间: 6年前

内容简介:通过上一篇文章,我们了解到了dom事件流,以及事件的处理程序,那么本文带大家了解下dom事件本身,在我们定义一个事件时,这个事件具有很多属性,基于这个属性得到的内容,我们可以进行下一步的逻辑操作。废话不多说,我们直接在codepen的案例中定义一个点击事件,然后看其返回的内容进行分析学习。通过基本的debugger我们可以看到event的全部属性,以及可以使用的方法。我们也会看到默认的dom2级事件流,去掉了捕获阶段的事件触发,虽然我们触发的是按钮,但触发了两次事件,分别是按钮自己的和父元素的。

通过上一篇文章,我们了解到了dom事件流,以及事件的处理程序,那么本文带大家了解下dom事件本身,在我们定义一个事件时,这个事件具有很多属性,基于这个属性得到的内容,我们可以进行下一步的逻辑操作。

初识dom级事件对象

废话不多说,我们直接在codepen的案例中定义一个点击事件,然后看其返回的内容进行分析学习。

<div id="app">
  <div class="container" id="container">
    <button  id="button">点击</button>
    <div id="text">
    </div>  
  </div>
</div>
// javascript
let body = document.getElementById('container');
let button = document.getElementById('button');
body.addEventListener("click",function(event){
  console.log('bodyevent'+event);
  console.log(this);
})
button.addEventListener("click",function(event){
  debugger
  console.log('buttonevent'+event);
  console.log(this);
 
})
复制代码

通过基本的debugger我们可以看到event的全部属性,以及可以使用的方法。我们也会看到默认的dom2级事件流,去掉了捕获阶段的事件触发,虽然我们触发的是按钮,但触发了两次事件,分别是按钮自己的和父元素的。

dom2级重要的事件对象属性

属性 分类 作用
x,y;pageX,pageY,clientX,clientY,offsetX,offsetY,screenX,screenY 触发事件的位置信息 主要描述其触发事件的位置,在拖动时非常实用
type 触发事件的类型信息 重要的类型信息,一般会根据不同的类型定义不同的交互,最常见的就是click类型,只读类型,除此之外还有鼠标的事件等,一般与我们追加时的事件名是相同的。
target,currentTarget 目标对象 其中target始终指向的是实际触发事件的对象,而currentTarget指的是事件监听的对象,其中this的指向永远和添加事件监听的对象是一致的。所以一般情况下我们获取对象是用的event.target,如果你想直接使用this,那么要把事件添加到直接的事件对象上才可以。
bubbles, cancelable 事件属性 当值为true的时候,可以调用下面的方法分别进行取消,否则无法操作
stopPropagation(),preventDefault() 事件方法属性 分别可以用来阻止冒泡,以及阻止默认事件

备注:事件对象只存在于事件发生期间,一旦程序执行完成,事件对象就会销毁。

ie的事件对象属性

大部分属性是相同的,取到事件对象的方法取决于如何定义的事件。如果是dom0级的,在ie中的方法是通过window.event方式;如果是attachEvent,那么要用event.

其中事件的不同也会导致属性的不同,但基本的属性是不变的。

属性 分类 作用
cancelBubble 读写属性 是否可以阻止捕获或者冒泡属性.默认是false,需要阻止设置为true
type 触发事件的类型信息 重要的类型信息,一般会根据不同的类型定义不同的交互
returnValue 读写属性,事件属性 是否可以取消默认行为。默认为true,需要阻止,设置为false
srcElement 目标对象,只读 与target相同

因为定义的方式不同,所以不能始终认为this会等于目标对象。所以会根据你添加的方式来确定其获取目标元素的方法。

如果是dom0级的,那么需要用window.event.srcElement,如果是attachEvent,那么要用event.srcElement

在ie中取消默认事件和冒泡事件直接设置其对应的值为false即可。

兼容的事件对象写法

那么我们还是一如既往的可以利用外观模式设计兼容的事件方法。

let eventUtil = {
    getEvent:function(event){
        return event || window.event
    },
    preventDefault:function(event){
        if(event.preventDefault){
            event.preventDefault();
        }else {
            event.returnValue = false;
        }
    }
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

函数式算法设计珠玑

函数式算法设计珠玑

Richard Bird / 苏统华、孙芳媛、郝文超、徐琴 / 机械工业出版社 / 2017-4-1 / 69.00

本书采用完全崭新的方式介绍算法设计。全书由30个珠玑构成,每个珠玑单独列为一章,用于解决一个特定编程问题。这些问题的出处五花八门,有的来自游戏或拼图,有的是有趣的组合任务,还有的是散落于数据压缩及字串匹配等领域的更为熟悉的算法。每个珠玑以使用函数式编程语言Haskell对问题进行描述作为开始,每个解答均是诉诸于函数式编程法则从问题表述中计算得到。本书适用于那些喜欢学习算法设计思想的函数式编程人员、......一起来看看 《函数式算法设计珠玑》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具