13. javacript高级程序设计-事件

1. 事件

1.1 事件流

事件流描述的是从页面中接受事件的顺序,IE的事件是冒泡流,而Netscape Communicator的事件流是事件捕捉流。

1.1.1 事件冒泡

<!DOCTYPE html>

<html>

<title>xxx</title>

<body>

<div id="myDiv">click me</div>

</body>

</html>

如果你点击了页面中的<div>元素,那么这个click事件会按照如下顺序传播:

(1). div

(2). body

(3). html

(4). document

1.1.2 事件捕捉

<!DOCTYPE html>

<html>

<title>xxx</title>

<body>

<div id="myDiv">click me</div>

</body>

</html>

如果你点击了页面中的<div>元素,那么这个click事件会按照如下顺序传播:

(1). document

(2). html

(3). body

(4). div

1.1.3 DOM事件流

“DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段,处于目标阶段和事件冒泡阶段。(IE9以上支持)

1.2 事件处理程序

1.2.1 HTML事件处理程序

<!DOCTYPE html>

<html>

<title>xxx</title>

<body>

<div id="myDiv" onclick="alert(‘hello‘)">click me</div>

</body>

</html>

将事件处理程序直接写在 html中

1.2.2 DOM0事件处理程序

(1). 设定处理程序

每个元素(包括window和document)都有自己的处理程序属性,这些属性通常都是小写,将这种属性设置为一个函数,就可以指定事件处理程序,

var btn = document.getElementsById(“btn”);

btn.onclick = function(){

alert(‘hello world’);

}

(2). 删除处理程序

btn.onclick = null;

1.2.3 DOM2事件处理程序

“DOM2事件”定义了两个方法用来删除和指定处理程序:addEventListener()和removeEventListener()。它们都接受三个参数:要处理的事件名,作为事件处理程序的函数和一个布尔值。(true表示捕获阶段调用,false表示冒泡阶段调用)

var btn = document.getElementsById(“btn”);

btn.addEventListener(‘click‘,function () {

// body...

alert(‘hi‘);

},false);

btn.removeEventListener(‘click‘,function () {

// body...

alert(‘hi‘);

},false);

1.2.4 IE事件处理程序

“IE事件”定义了两个方法用来删除和指定处理程序:attchEvent ()和detachEvent ()。它们都接受三个参数:要处理的事件名,作为事件处理程序的函数,IE处理程序在冒泡阶段执行

var btn = document.getElementsById(“btn”);

btn. attchEvent (‘click‘,function () {

// body...

alert(‘hi‘);

});

btn. detachEvent (‘click‘,function () {

// body...

alert(‘hi‘);

});

1.2.5 跨浏览器处理程序

var EventUtil = {

addHandler: function(element, type, handler) {

// body...

if (element.addEventListener) {

element.addEventListener(type, handler, false);

} else if (element.attachEvent) {

element.attachEvent(type, handler);

} else {

element["on" + type] = handler;

}

}

removeHandler: function(element, type, handler) {

if (element.removeEventListener) {

element.removeEventListener(type, handler, false);

} else if (element.detachEvent) {

element.detachEvent(type, handler);

} else {

element["on" + type] = null;

}

}

}

1.3 事件对象

1.3.1 DOM事件对象

兼容DOM浏览器会将一个event对象传入到事件处理程序中,event对象包含与创建它的特定事件有关的属性和方法。


属性/方法


类型


读/写


说明


bubbles


cancelable


currentTarget


Element


当前正在处理时间的元素


defaultPrevented


detail


eventPhase


preventDefault()


Function


取消事件的默认行为


stopImmediatePropagation()


stopPropagation()


Function


取消事件的进一步捕获或者冒泡


target


事件的目标


trusted


type


事件的类型


view

1.3.2 IE事件对象

IE DOM中的event一般作为window对象的一个属性存在。


属性/方法


类型


读/写


说明


cancelBubble


设置true取消事件冒泡


returnValue


设置false取消事件默认行为


srcElement


事件的目标


type


被触发的事件类型

1.3.3 跨浏览器事件对象

var EventUtil = {

addHandler: function(element, type, handler) {

// body...

if (element.addEventListener) {

element.addEventListener(type, handler, false);

} else if (element.attachEvent) {

element.attachEvent(type, handler);

} else {

element["on" + type] = handler;

}

},

removeHandler: function(element, type, handler) {

if (element.removeEventListener) {

element.removeEventListener(type, handler, false);

} else if (element.detachEvent) {

element.detachEvent(type, handler);

} else {

element["on" + type] = null;

}

},

getEvent: function(event) {

return event ? event : window.event;

},

getTarget: 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;

}

}

}

1.4 事件类型

1.4.1 UI事件

l load

当页面完全加载后(包括所有图像,JavaScript文件,Css文件等外部资源),就会触发window上面的load事件

l unload

与load事件对应的unload事件,这个事件在文档被完全卸载后触发

l resize

当浏览器窗口被调整到一个新的高度或者宽度的时候,就会触发window窗口的resize事件

l scroll

scroll事件在window对象上发生,表示页面相应元素的变化

1.4.2 焦点事件

l focus:元素获取焦点时触发,不冒泡

l blur:元素失去焦点是触发,不冒泡

1.4.3 鼠标与滚轮事件

l click:点击主鼠标按钮(通常左键)或者按下回车键

l dbclick:双击主鼠标按钮(通常左键)

l mousedown:在用户按下任意鼠标键触发

l mouseenter:在鼠标光标首次移动到元素范围内触发

l mouseleave:位于元素范围内的光标移动到元素范围之外是触发

l mousemove:在鼠标在元素范围内移动是触发

l mouseout:鼠标指针在一个元素上方,移动到另一个元素上方时触发

l mouseover:鼠标从元素外部首次移动到元素内触发

l mouseup:用户释放鼠标按钮时触发

1.4.4 键盘与文本事件

l keydown:键盘按下事件

l keypress:按下键盘上的字符键触发,获取按下当前键的ASCII码

getCharCode:function(event){

if(typeof event.charCode == "number"){

return event.charCode;

}else{

return event.keyCode;

}

}

l keyup:用户释放键盘上的按键触发

1.4.5 HTML5事件

l contextmenu

通过点击鼠标右键可以显示上下文菜单,事件的目标是发生在用户操作的元素上

l beforeunload

页面卸载前触发,以便阻止页面卸载

l DOMContentLoaded

这个事件会在DOM元素加载完毕触发,不理会css,js,图片等外部元素

l readystatechange

这个事件的目的是提供与文档或元素的加载状态有关的信息,支持readystatechange事件的每个对象都有一个readyState属性,

  1. uninitialized:未初始化
  2. loading:正在加载数据
  3. loaded:加载数据完毕
  4. interactive:可以操作对象,但还没有完全加载完成
  5. complete:对象已经加载完毕

l haschange

在页面URL的参数列表发生变化时(以及URL中#号后面的所有字符串)发生变化是通知开发人员

时间: 2024-10-29 03:40:37

13. javacript高级程序设计-事件的相关文章

高级程序设计-事件

作者:zccst 一.事件流标准:DOM事件流中,实际的目标在捕获阶段不会接收到事件.即捕获从document到body就停止了.在处于目标阶段,事件在div上发生,并在事件处理中被看成冒泡阶段的一部分.实际:在捕获阶段会涉及,结果有两个机会在目标对象上操作事件. 二.事件处理程序(事件监听器)事件处理程序:HTML,DOM0级,DOM2级 HTML:<input type="button" value="ClickMe" onclick="aler

24. javacript高级程序设计-最佳实践

1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html应该定义内容,css应该定义外观 l 这些职责上的混乱会导致难以调试的错误和维护上的问题 l javascript执行所花费的事件直接影响到web页面的性能 l DOM交互的开销很大,需要限制DOM操作的次数 l 可以考虑将javascript文件合并为单个文件 l 使用压缩器将文件尽可能变小 l

23. javacript高级程序设计-数据存储

1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过20个cookie (2). cookie的构成 名称:一个唯一确定cookie的名称,不区分大小写,cookiede 名称必须经过URL编码 值:存储在cookie中的字符串值,值必须被URL编码 域:cookie对那个域是有效的,所有向该域发送的请求都会包含该cookie,可以包含子域,没有明确

25. javacript高级程序设计-新兴的API

1. 新兴的API requestAnimationFrame():是一个着眼于优化js动画的api,能够在动画运行期间发出信号.通过这种机制,浏览器就能够自动优化屏幕重绘操作 Page Visibility API:让开发人员知道用户什么时候正在看着页面,而什么时候页面是隐藏. Geolocation API:在得到用户许可的情况下,可以确定用户的位置 File API:可以读取文件内容,用户显示.处理和上传 Web Timing:给出了页面加载和渲染过程的很多信息,对性能优化非常有价值 We

12. javacript高级程序设计-DOM2和DOM3

1. DOM2和DOM3 DOM2级规范定义了一些模块,用于增强DOM1级.“DOM2级核心”为不同的DOM类型引入了一些与XML命名空间有关的方法,这些变化只在使用XML或者XHTML,对于HTML文档没有实际意义.除了与XML命名空间有关方法外,“DOM2核心”还定义了以编程方式创建Document实例的方法,也支持了创建DocumentType对象. “DOM2级样式”模块主要针对操作元素的样式信息而开发,其简要特性总结如下: l 每个元素都有一个关联的style样式,可以用来确定和修改行

15. javacript高级程序设计-Canvas绘图

1. Canvas绘图 HTML5的<canvas>元素提供了一组JavaScript API,让我们可以动态的创建图形和图像.图形是在一个特定的上下文中创建的,而上下文对象目前有两种. 第一种是2D上下文,可以执行原始的绘图操作, l 设置填充.描边颜色和模式 l 绘制矩形 l 绘制路径 l 绘制文本 l 创建渐变和模式 第二种是3D上下文,即WebGL上下文. l 使用GLSL编写的顶点和片段着色器 l 支持类型化数组,即能够将数组中的数据限定为某种特定的数值类型 l 创建和操作纹理 主流

2. javacript高级程序设计-在HTML中使用JavaScript

1.1 <script>元素 向HTML页面中插入JavaScript的主要方法,就是使用<script>元素,<script>元素定义了一下6个元素: (1). async:可选,表示立即下载脚本,只对外部脚本文件有效 (2). charset:可选,表示通过src属性指定的代码的字符集 (3). defer:可选,表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本文件有效 (4). language:已废弃,原来用于表示编写代码使用的脚本语言 (5).

16. javacript高级程序设计-HTML5脚本编程

1. HTML5脚本编程 l 跨文档消息传递API能够让我们在不降低同源策略安全性的前提下,在来至不同的域的文档间传递消息 l 原生拖放功能可以方便的指定某个元素是否可以拖动,并在放置时做出响应.还可以创建自定义的可拖放元素及放置目标 l 新的媒体元素<audio>和<video>可以拥有自己的与视频和音频交互的API l 历史状态管理让我们不必卸载当前页面即可以修改浏览器的历史状态栈.

14. javacript高级程序设计-表单

1. 表单脚本 1.1 基础知识 <from>元素表示表单: l acceptCharset:服务器能处理的字符集 l action:接受请求的URL l elements:表单中所有控件的集合 l enctype:请求的编码类型 l length:表单中控件的数量 l method:要发送的HTTP请求类型,通常是get或者post l name:表单的名称 l reset():将所有的表单重置为默认值 l submit():提交表单 l target:用于发送和接受请求响应的窗口名称 1.