web学习笔记(二十四)

简介: web学习笔记(二十四)

1.事件流

1.1事件流的定义

就是事件在页面中的传播机制,事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程就是DOM事件流。

1.2事件流的三个阶段

(1)捕获阶段:网景最早提出,现在我们使用的浏览器都已经不使用这个阶段了,了解即可,从最外层节点向内层进行传播,如果没有操作则继续向下传播,直到目标。

(2)目标阶段:就是当前操作的节点。

(3)冒泡阶段: IE 最早提出,现在浏览器大都使用冒泡机制,从里层向外层进行传播,直到最顶层。

1.3没有冒泡机制的事件

大部分事件都要冒泡机制 ,但有一些事件没有冒泡机制,需要我们注意一下。

onmouseenter

当鼠标进入的时候

onmouseleave

当鼠标离开的时候

onfocus

当获焦的时候

onblur

当失焦的时候

onresize

当窗口尺寸改变的时候

onload

当页面加载的时候

1.4事件流总结

  • onclick和attchEvent只能得到冒泡阶段。
  • addEventListener(type, listener[, useCapture])第三个参数如果是 true,表示在事件捕获阶段调用事件处理程序;如果是 false(不写默认就是false),表示在事件冒泡阶段调用事件处理程序。
  • 在时间开发中我们很少用事件捕获,更多的使用事件冒泡。
  • 通过e.cancelBubble=true;或者e.stopPropagation()可以阻止冒泡。根据浏览器的版本不同,可能会有问题产生,下面的代码可以解决兼容性的问题,从而更好的阻止冒泡的发生。
    if(e.stopPropagation){
                e.stopPropagation()
            }else{
                e.cancelBubble=true;
            }

2.事件对象和事件委托

2.1什么是事件对象

事件对象event(e)就是函数中的形参,这个形参是系统帮我们创建的,里面包含了跟事件相关的一系列信息数据,不需要传递实参过去。可以直接使用

  var btn = document.querySelector('#btn');
        btn.onclick = function (e) {
            console.log(e);
            // 输出鼠标事件对象 
 
        }

2.2 事件对象中需要关注的属性和方法 image.png 补充 阻止默认动作的方法:

(1)阻止超链接跳转动作:<a href="iavascript:;"></a>

(2)阻止表单的提交动作: <form action="return false"></form>或者用下面的代码也可以完成这个工作。

   form.onsubmit=function(e){
            e.preventDefault();
        }

(3)阻止右击菜单动作:

  document.oncontextmenu=function(e){
            e.preventDefault();
        }

(4)阻止选中的动作,禁止鼠标选中:

    document.onselectstart=function(e){
            e.preventDefault();
        }

2.3 e.target 和 this 的区别:

this 是事件绑定的元素, 这个是函数的调用者(绑定这个事件的元素)

e.target 是事件触发的元素。

2.4事件对象的兼容性问题

  1. 标准浏览器中是浏览器给方法传递的参数,只需要定义形参 e 就可以获取到。
  2. 在 IE6~8 中,浏览器不会给方法传递参数,如果需要的话,需要到 window.event 中获取查找。

解决办法:e = e || window.event;

3.事件委托

     事件委托也称为事件代理, 在 jQuery 里面称为事件委派。事件委托就是利用冒泡机制,比如我们通过cloneNode克隆出来的节点,然后新节点事件不生效,此时就可以通过事件委托来解决。


      解决思路:不给被克隆的元素加事件,委托给父辈的元素代替他添加这个事件,然后利用冒泡原理影响设置每个子节点。一般在使用时搭配e.target(事件触发的元素)来完成一些事情。

利用事件委托我们减少了访问DOM的次数,减少了整个页面的交互就绪时间,提高了程序的性能。

4.键盘事件

onkeypress

 按下(使用率较低,功能键(ctrl alt shift)不识别,区分大小写)

onkeydown

 按下(不区分大小写)

onkeyup

 松开(不区分大小写)

  • 键盘对象中比较重要的属性: e.keyCode  键的ASCII码;    e.key      键(使用率较高)
  • 通常都是给文档添加键盘事件。
相关文章
|
2月前
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
122 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
|
7月前
|
JavaScript
web学习笔记(二十)
web学习笔记(二十)
40 0
|
2月前
|
文件存储 Python
Flask学习笔记(一):Flask Web框架
本文介绍了Flask Web框架的基本概念、安装方法、初始化参数、程序编写、静态文件显示和配置信息加载等基础知识。
34 0
|
5月前
|
自然语言处理 运维 JavaScript
web-flash 学习笔记
web-flash 学习笔记
|
7月前
|
JavaScript 前端开发 API
web学习笔记(二十九)jQuery
web学习笔记(二十九)jQuery
45 0
|
7月前
|
存储 JSON JavaScript
web学习笔记(二十八)
web学习笔记(二十八)
46 0
|
7月前
web学习笔记(二十七)PC端网页特效
web学习笔记(二十七)PC端网页特效
44 0
|
7月前
|
JavaScript 前端开发 Go
web学习笔记(二十六)
web学习笔记(二十六)
46 0
|
7月前
|
JavaScript 前端开发 内存技术
web学习笔记(二十五)BOM开始
web学习笔记(二十五)BOM开始
50 0
|
7月前
|
JavaScript 前端开发
web学习笔记(二十三)
web学习笔记(二十三)
62 0