js 基础相关知识(3)-- DOM 和 BOM操作 相关知识(事件相关内容)

157 阅读3分钟

(记录自己在网上学习的一些资料,方便后面复习,如有侵权可删!)

8 事件(高级事件)

给元素添加事件, 称为注册事件或者绑定事件。

注册事件有两种方式:传统方式和方法监听注册方式。

1 传统注册方式

● 利用 on 开头的事件 onclick

● <button onclick = ''alert('hi~')''>

● btn.onclick = function(){}

● 特点: 注册事件的唯一性

● 同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数会覆盖前面注册的处理函数。

方法监听注册方式

● w3c 标准 (推荐方式)

● addEventListener() 它是一个方法

● IE9 之前的IE不支持此方法,可使用 attachEvent()代替

● 特点:同一个元素同一个事件可以注册多个监听器

● 按注册顺序依次执行

2 删除事件(解绑事件)

1 传统注册方式

eventTarget.onclick = null;

2 方法监听注册方式

① eventTarget.removeEventListener(type, listener, [, useCapture]);

② eventTarget.detachEvent(eventNameWithOn, callback);

3 DOM 事件流

事件流 描述的是从页面中接收事件的顺序。

事件阿生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM事件流。

DOM 事件流分为3个阶段:

1 捕获阶段

2 当前目标阶段

3 冒泡阶段

事件冒泡:IE最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到DOM最顶层节点的过程。

事件捕获:网景最早提出,由DOM最顶层节点开始,然后逐级向下传播到最具体的元素接收的过程。

注意:

  1. JS代码中只能执行捕获或者冒泡其中的一个阶段。

  2. onclick 和 attachEvent 只能得到冒泡阶段。

  3. addEventListener(type, listener[, useCapture]第三个参数如果是true, 表示在事件捕获阶段调用事件处理程序;如果是false(不写默认是false),表示在事件冒泡阶段调用事件处理程序。)

  4. 实际开发中很少使用事件捕获,主要更关注事件冒泡。

  5. 有些事件是没有冒泡的,比如onblur、onfocus、onmouseenter、onmouseleave

  6. 事件冒泡有时候带来麻烦,有时候很方便做某事件。

e.target 和 this的区别

  1. e.target 返回的是触发事件的对象(元素)
  2. this 返回的是绑定事件的对象(元素)

阻止事件冒泡(面试题常考)

(标准写法,常用)

  1. 阻止冒泡 dom 推荐的标准 stopPropagation()

eg:e.stopPropagation()

  1. e.cancelBubble = true; (非标准写法,不推荐,使用IE6-8)

事件委托(代理、委派)

事件委托也称事件代理,在jQuery里面称为事件委派。

事件委托原理(重点,面试常考):

不是每个子节点单独设置事件监听器,而是把事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。(事件冒泡的优点)

事件委托作用:

只操作一次DOM,提高了程序的性能。

获取鼠标在页面中的坐标

  1. client 鼠标在可视区的x和y的坐标

    e.clientX

    e.clientY

  2. page 鼠标在页面文档的x和y坐标 (常用)

    e.pageX

    e.pageY

  3. screen 鼠标在电脑屏幕的x和y坐标

    e.screenX

    e.screenY