事件

【事件流】表述的是从页面接收事件的顺序。
1、事件冒泡流:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档)。所有浏览器都支持。
2、事件捕获:与事件冒泡相反,事件捕获的用意在于在事件到达预定目标之前捕获他,(很少有人用,除非特殊情况)。
3、DOM事件流:分为三个阶段:事件捕获阶段,处于目标阶段(实际的目标接收到事件)和事件冒泡阶段(这个阶段对事件发生应)。

【事件处理程序】即响应某个事件的函数。事件处理程序的名字以on开头。
1、HTML事件处理程序:缺点:首先存在时差问题,第二个缺点是这样的话扩展事件处理程序的作用域链在不同的浏览器中会导致不同结果。第三,HTML与Javascript代码紧密耦合,要改动事件处理程序需改动两个地方。
2、DOM0级事件处理程序:(通过javascript指定事件处理程序)简单,具有跨浏览器优势,首先必须取得一个要操作的对象的引用。每个属性都有自己的事件处理程序,这些属性通常全部小写。例如:btn.onclick=function(){},要删除这个事件处理程序,只需:btn.onclick=null;
3、DOM2级事件处理程序:定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListene().他们接受三个参数(要处理的事件名、作为事件处理程序的函数和一个布尔值)布尔值是true,表示在捕获阶段调用事件处理程序,为false,表示在冒泡阶段调用事件处理程序。这个方法添加事件处理程序的好处在于可以添加多个事件处理程序。执行顺序与添加顺序相同。通过addEventListener()添加的事件处理程序只能使用removeEventListener()移除,她们必须传入相同的参数。大多数情况下,将事件处理程序添加到事件流的冒泡阶段,这样可以最大限度地兼容各种浏览器。
4、IE事件处理程序:两个方法:attachEvent()和detachEvent(),接受两个相同的参数,即事件处理程序名和事件处理程序函数。在使用attachEvent()的情况下,事件处理程序会在全局作用域中进行,这里this=window。同样attachEvent()可以为一个元素添加多个事件处理程序,执行顺序于添加顺序相反。
5、跨浏览器的事件处理程序:方法:addHandler()和removeHandler(),接受相同的三个参数:要操作的元素,事件名称和事件处理程序的函数。

【事件对象】
1、DOM中的事件对象:兼容DOM的浏览器会将一个event对象传入到事件处理程序中。要阻止特定事件的默认行为,可以使用preventDefault()方法。stopPropagation()方法用于立即停止事件在DOM层次中的传播。只有在事件处理程序执行期间,event对象才会存在。
2、IE中的事件对象:在使用DOM0级的方法添加事件处理程序时,event作为window的一个属性存在,如果是通过html特性指定的事件处理程序,可以通过一个名叫event的变量来访问event的对象。因为事件处理程序的作用域是根据指定他的方式来确定的,所以不能认为this会始终等于事件目标,所以使用event.src.Element比较保险。returnValue属性相当于DOM中的preventDefault()方法,用来取消给定事件的默认行为,只需将returnValue的值设置为false。
3、跨浏览器的事件对象:给EventUtil对象添加方法来实现获取对象的信息,getTarget()方法返回事件的目标。preventDefault()方法,stopPropagation()方法在这里同样有用。

【事件类型】
1、UI事件:指那些不一定与用户操作有关的事件。
load事件:当页面加载完后触发-onload。
unload事件:在文档完全卸载之后触发。只要用户从一个页面切换大另一个页面就会触发unload事件,利用这个事件更多的是清用,以避免内存泄漏。同样也可以指定onunload事件处理程序。

resize事件:但浏览器窗口被调整到一个新的高度或宽度时,就会触发这个事件,在window窗口上面触发,可以通过onresize特来指定事件处理程序。scroll事件:在window对象上发生,表示页面中相应元素的变化。在混杂模式下可通过scrollleft和scrolltop来监控到这一变化。
2、焦点事件:获得或失去焦点时触发。
3、鼠标与滚轮事件:click事件用户单击触发,dblclick双击鼠标事件,mouseout鼠标移入事件,mouseover鼠标移出事件。
鼠标按钮:按钮button的属性值,支持DOM版鼠标事件的浏览器还可以通过hasFearture()方法来检测,所以可以再喂EventUtil对象添加getButton方法。
更多的事件信息:detail属性,其中包含一个数值,表示再给订位置上发生了多少次单击,detail书香值从1开始计数,每单击发生后值就增加。altLeft,布尔值,表示是否按下了Alt键,以此类推。
滚轮事件:mousewheel事件,其对应的event对象除包含鼠标事件的所有标准信息外,还包含一个特殊的wheelDelta属性。火狐支持一个名为DOMMouseScroll的类似事件。
4、键盘与文档事件:
三个键盘事件:keydown,按下键盘上的任意键触发的事件,keypress,按下键盘上的字符键时触发,keyup当用户释放键盘上的键时触发。(一般在用户通过文本框输入文本时常见)。
一个文本事件:textInput,在文本插入文本框之前触发。
键码:在发生keydown,keypress事件时,event对象的keyCode属性中会包含一个代码,与键盘上的一个特定的键对应。字符编码:charCode属性。取得字符编码后就可以使用String.fromCharCode()将其转换成实际的字符。
DOM3级变化:不再包含charCode属性。包含两个新的属性:key和char,给event对象添加了getModifierState()方法,接受一个参数,即等于shift、control等的字符串。
textInput事件:当用户在可编辑区域中输入字符时触发。他的event对象中还包含一个data属性,他的值就是用户输入的字符,event对象还有inputMethod属性,表示表示把文本输入到文本框的方式。
5、复合事件:用于处理IME的输入序列(输入法编辑器)
6、变动事件:
删除节点:
插入节点:
7、html5事件
contextmenu事件:上下文菜单,即通过单击鼠标右键可以调出上下文菜单。
beforeunload事件:在浏览器卸载页面之前触发,通过他来取消卸载并继续使用页面。为了显示弹出这个对话框,必须将event.returnValue的值设置为显示给用户的字符串,同时作为函数的值返回。
DOMContentLoaded事件:其支持在页面下载的早期添加事件处理程序。类似于window的load事件。
readystatechane事件:其目的是提供与文档或元素加载状态有关的信息,支持readystatechane事件的每个对象都有一个readyState属性,包括5个值:uninitialized(未初始化),loading(正在加载),loaded(加载完毕),interactive(交互),complete(完成)。

【内存和性能】
事件委托:对“事件处理程序过多”的问题的解决方案就是  事件委托。

【模拟事件】
模拟鼠标事件、模拟键盘事件。

【总结】
在使用事件时,有必要限制一个页面中事件处理程序的数量,数量太多会导致占用大量内存,页面反应不敏捷,建立在事件冒泡机制之上的事件委托技术,可以有效的减少事件处理程序的数量;建议在浏览器卸载页面之前移除页面中所有的事件处理程序。javascript在浏览器中的模拟事件,为模拟各种有定义的事件提供了方便,通过组合使用一些技术,可以在某种程度上模拟键盘事件。

Javascript-理解事件总结的更多相关文章

  1. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  2. 理解的javascript自定义事件

    理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...

  3. JavaScript:理解worker事件api

    如果你不是很了解Event事件,建议先看我上一篇随文javascript:理解DOM事件.或者直接看下文worker api. hack 首先,我们需要实例一个Worker的对象,浏览器会根据新创建的 ...

  4. 对javascript EventLoop事件循环机制不一样的理解

    前置知识点: 浏览器原理,浏览器内核5种线程及协作,JS引擎单线程设计推荐阅读: 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理 [FE]浏览器渲染引擎「内核」 js异步编程,Promise ...

  5. 【追寻javascript高手之路05】理解事件流

    前言 新的一天又开始了,我们对今天对未来抱有很大期待,所以开始我们今天的学习吧,在此之前来点题外话,还是爱好问题. 周三的面试虽然失败,但是也是很有启迪的,比如之前我就从来没有想过爱好问题,我发现我的 ...

  6. javascript的事件

    前戏 今天在博客中看到了javascript的事件机制,就自己试试写一个简单的冒泡捕获测试,但是测试结果出乎了我的意料,主要是自己原来对事件了解不是很清楚,现在写篇博客记录下. 基础 先来看一下我在A ...

  7. JavaScript的事件机制

    JavaScript的事件机制 摘要 事件是将JavaScript脚本与网页联系在一起的主要方式,是JavaScript中最重要的主题之一,深入理解事件的工作机制以及它们对性能的影响至关重要.本文将详 ...

  8. jQuery 事件绑定 和 JavaScript 原生事件绑定

    总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...

  9. [译] JavaScript 的事件循环

    译者注 本译文基本是按原文的意思来翻译,但对于 JavaScript 的事件循环,个人感觉还是 Philip Roberts 的视频讲解更形象些,思路和本文大致相同,不过他把事件表理解为 Web AP ...

  10. JavaScript(3)---事件冒泡、事件捕获

    JavaScript(3)---事件冒泡与事件捕获 一.理解冒泡与捕获 假设有这么一段代码 <body> <div><p>标签</p> </div ...

随机推荐

  1. What are DESC and ASC Keywords?

    What are DESC and ASC Keywords? ASC is the short form for ascending DESC is the short form for desce ...

  2. python的标准类型分类

    数据属性 储存模型 更新模型 访问模型 数字 标量/原子类型 不可变类型 直接存取 字符串 标量/原子类型 不可变类型 顺序 列表 容器  可变类型 顺序  元组 容器 不可变类型 顺序 字典 容器 ...

  3. MySQL中有关icp mrr和bka的特性

    文辉考我的问题,有关这三个的特性,如果在面试过程中,个人见解可以答以下 icp MyQL数据库会在取出索引的同时,判断是否进行WHERE条件过滤,也就是把WHERE的部分过滤操作放在存储引擎层,在某些 ...

  4. 什么是lambda函数?它有什么好处?

    lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数. lambda 函数不能包含命令,它们所包含的表达式不能超过一个.不要试图向lambda 函数中塞入太多的东西: ...

  5. 001-Spring在代码中获取bean的几种方式

    一.概述 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类Applicati ...

  6. SaltStack安装配置

    一.环境准备:操作系统CentOS Linux release 7.3.1611master ip:192.168.1.180minion ip:192.168.1.183设置server(maste ...

  7. 剑指offer 面试36题

    面试36题: 题:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路一:由于输入的一个二叉搜索树, ...

  8. tcpdump Demo

    tcpdump Demo lxw ~$ tcpdump -i eth0 tcpdump: eth0: You don't have permission to capture on that devi ...

  9. python中的标识符长度能有多长

    在python中,标识符可以还是任意长度.此外,我们在命名标识符时还必须遵守以下规则 1 只能以下划线或者A-Z/a-z中字母开头 2 其余部分可以使用A-Z/a-z/0-9 3 区分大小写 4 关键 ...

  10. 前端基础之jquery练习

    实例练习 左侧菜单 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...