UI 事件
load当页面、框架、图片、嵌入资源分别在 window、frames 框架、img元素、object元素上加载完毕时触发unload页面、框架、嵌入资源 完全卸载后在 window、frames 框架、object元素 上面触发abort用户停止下载,而嵌入的内容仍没有加载完时在object元素 上触发error发生 JavaScript 错误时在 window 对象 上触发,无法加载图片、无法加载资源、无法加载某些框架时分别在 img 元素、object 元素、框架集 上触发select用户选择文本输入框(input type="text"textarea)中的一个或多个字符时在input元素、texterea元素 上触发resize窗口或框架大小变化时在 window 对象 或 框架 上面触发scroll用户滚动带滚动条的元素中的内容时,在该 元素 上触发,滚动网页主体时在body元素 上触发
需要注意的点:
- 以上事件触发的对象需要注意的地方
select事件触发的元素时表单域的 输入元素;- 大部分时间都能在
window对象 上触发。
检测浏览器是否支持 DOM 2 级事件、DOM 3 级事件 规定的以上 HTML、UI 事件:
var isSupported = document.implementation.hasFeature('HTMLEvents', '2.0');
var isSupported = document.implementation.hasFeature('UIEvents', '3.0');
1. load 事件
当页面完全包括图像、JS 文件、CSS 文件等 外部资源完全加载,就会在
window对象 上触发load事件;所以遇到资源请求多、大的页面,不做特殊处理的话,
load事件发生会比较迟滞也可以为
body元素添加onload特性;不推荐,这只是浏览器为了向后兼容采用的措施
现代浏览器中:
load事件的target是document;一般来说,在
window上面发生的任何事件都能在body元素中通过相应的特性来指定;规范指定:应该在
document上触发load事件,而不是在window对象上,但是,所有浏览器都在window上面实现load事件;也可以为
img元素指定onload事件处理程序,此时target为img元素本身:var image = getElement('#myImg'); eventUtil.addEventHandler(image, 'load', function(event) { event = eventUtil.getEvent(event); target = eventUtil.getTarget(event); alert(target.src); })创建新的
img元素并为其指定load事件处理程序:在指定src属性之前先指定事件处理程序eventUtil.addEventHandler(window, 'load', function() { var image = document.createElement('img'); eventUtil.addEventHandler(image, 'load', function() { var event = eventUtil.getEvent(event); var target = eventUtil.getTarget(event); alert(target.src); }); document.body.appendChild(image); image.src = '...' })通过 DOM 操作新建的图像元素的
src新图像资源, 一经设置马上下载;DOM 0 级的
Image对象也可以用于新建img元素(在错误处理一章,我们用到了使用image对象的src请求服务器端的错误记录程序,以实现客户端错误服务器端记录的效果)var image = new Image(); image.src = '...';兼容:在不属于 DOM 文档的图像上触发
load事件时,IE 8 及以下版本不会生成event对象;大部分现代浏览器(IE 9+)还支持
script元素的load事件;但是动态加载script与img元素有所不同使用 DOM 生成
img元素,一经设置src马上下载图片资源;使用 DOM 方法动态创建script元素,设置了src后还需要将 script 元素插入文档脚本才会开始下载;部分浏览器还支持
link元素上的load事件,但各个浏览器对待这个问题差异很大。
2. unload、beforeunload 事件
发生时机:用户关闭窗口、跳转离开或卸载框架时在
window或 框架对象 上触发;指定
unload和beforeunload事件eventUtil.addEventHandler(window, 'unload', function(event) { return '此页面的数据会在关闭或重载后丢失,确定离开或重载页面?'; }) eventUtil.addEventHandler(window, 'beforeunload', function(event) { return '此页面的数据会在关闭或重载后丢失,确定离开或重载页面?'; })此事件一般用于一些关闭或重载后数据会丢失的页面,经测试,需要有
return值才能使浏览器触发离开或重载前的询问对话框。
resize 事件
触发条件:浏览器窗口被调整到一个新的高度或宽度; 触发对象:
window指定
resize事件的两种形式:- JavaScript 指定:
addEventHandler ---> window - HTML 属性指定:
body onresize=""
- JavaScript 指定:
传入事件处理程序的
event对象的唯一属性:target,指向document;IE 8 及之前版本则未对
resize的event提供任何属性各个浏览器处理
resize事件的方式不尽相同- 大部分浏览器只要窗口一旦变化就会立即触发;
- FF 则会等到调整停止(稳定)下来才会触发。
scroll 事件
scroll事件发生在window对象;可以使用
body元素的scrollLeft和scrollTop来监控这一变化;scroll 事件会在页面滚动时被重复触发,所以尽可能保持事件处理程序的代码简洁。