码迷,mamicode.com
首页 > Web开发 > 详细

JS 事件(5)——事件类型——UI事件

时间:2016-08-05 16:08:23      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

UI事件

UI(User Interface,用户界面)事件,指的是那些不一定与用户操作有关的事件。 

UI事件包括load、unload、abort、error、select、resize、scroll。

这些事件在DOM2级事件中都归为HTML事件;要确定浏览器是否支持DOM2级事件中规定的HTML事件,可以使用如下代码:

1 var isSupported = document.implementation.hasFeature("HTMLEvents", "2.0");
2 alert(isSupported);    //true

注意:只有根据“DOM2级事件”实现这些事件的浏览器才会返回true,而以非标准方式支持这些事件的浏览器会返回false。

 

要确定浏览器是否支持“DOM3级事件”定义的事件,可以使用如下代码:

1 var isSupported = document.implementation.hasFeature("UIEvent", "3.0");
2 alert(isSupported);    //true

 

html代码

技术分享
 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>事件类型</title>
 6     </head>
 7     <body>
 8         <div id="box">
 9             <input type="button" id="btn" value="button">
10         </div>
11         <script src="事件对象.js"></script>
12         <script type="text/javascript">
13         </script>
14     </body>
15 </html>
View Code

 

load事件

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

1 var btn = document.getElementById("btn");
2 event_util.addHandler(window, "load", function(event) {
3     alert("Hello");
4     alert(event.type);    //load
5 });

注意:根据“DOM2级事件”规范,应该在document而非window上触发load事件;但是所有浏览器都在window上实现了该事件,以确保向后兼容。

 

在创建新的<img>元素时,可以为其指定一个事件处理程序,以便图像加载完成后给出提示。

新图像元素不一定要从添加到文档后才开始下载,只要设置了src属性就会开始下载。

此时,最重要的是在指定src属性之前先指定事件,如下:

 1 event_util.addHandler(window, "load", function() {
 2     var image = document.createElement("img");
 3     event_util.addHandler(image, "load", function(event) {    //在指定src属性前先指定事件
 4         event = event_util.getEvent(event);
 5         alert("Hello");
 6         alert(event.target.src);
 7     });
 8     image.src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg";
 9     document.body.appendChild(image);
10 });

 

但是如果在指定src属性之后指定事件,如下:

 1 event_util.addHandler(window, "load", function() {
 2     var image = document.createElement("img");
 3     image.src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg";
 4     document.body.appendChild(image);
 5     event_util.addHandler(image, "load", function(event) {    //在指定src属性后才指定事件
 6         event = event_util.getEvent(event);
 7         alert("Hello");
 8         alert(event.target.src);
 9     });
10 });

 

两种方式并无差别,为什么非要选第一种,还特别说明?

 

在IE9+、Firefox、Opera、Chrome、Safari3+及更高版本中,<srcipt>元素也能触发load事件。

只有在设置了<srcipt>元素的src属性并将其添加到文档后,才会开始下载JavaScript文件。

对于<script>元素而言,指定src属性与指定事件处理程序的顺序不重要。

 

IE和Opera还支持<link>元素上的load事件,以方便开发人员确定样式表是否已经加载完毕。

与<srcipt>元素类似,在未指定其href属性并将其添加到文档之前,样式表不会开始下载。

 

unload事件

这个事件在文档被完全卸载后触发。

只要用户从一个页面切换到另一个页面,就会触发unload事件。

利用这个事件最多的情况是清除引用,以避免内存泄漏。

1 event_util.addHandler(window, "unload", function() {
2     alert("Good bye!");
3 });

亲测,上述代码只能在IE中有效,在Firefox及Chrome中无效,为何?

注意:根据“DOM2级事件”规范,应该在<body>元素而非window上触发unload事件;但是所有浏览器都在window上实现了该事件,以确保向后兼容。

 

resize事件

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

这个事件在window上触发。

1 event_util.addHandler(window,"resize", function() {
2     alert("The window has been resized!");
3 });

浏览器窗口最大化或最小化也会触发resize事件。

 

srcoll事件

虽然srcoll事件是在window对象上触发的,但它实际表示的是页面中相应元素的变化。

在标准模式下, 除Safari外所有的浏览器都会通过<html>元素来反映这一变化;Safari仍然基于<body>元素跟踪滚动位置。

1 event_util.addHandler(window, "scroll", function() {
2     if(document.compatMode == "CSS1Compat") {
3         alert(document.documentElememt.scrollTop);
4     } else {
5         alert(document.body.scrollTop);
6     }
7 });

 

abort事件

在用户停止下载过程时,如果嵌入的内容没有加载完,则在<object>元素上触发。

 

error事件

传送门有待补充。。。

 

select事件

传送门有待补充。。。

 

JS 事件(5)——事件类型——UI事件

标签:

原文地址:http://www.cnblogs.com/cc156676/p/5741417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!