UI事件

UI事件是指那些不一定与用户操作有关的事件

这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器

而在DOM事件中为了保证向后兼容,现有的UI事件如下:

  • DOMActivate:表示元素已经被用户操作激活,该事件在DOM3规范中被废弃,因此不建议使用
  • load:当页面完全加载后在window对象上触发,图像加载完毕在 img 标签触发,嵌入内容加载完毕在 object 元素触发
  • unload:页面完全卸载后在 window 对象触发,框架卸载完成在框架集上触发,嵌入内容卸载完成在 object 元素触发
  • abort:在用户停止下载时,若嵌入内容没有加载完则在 object 元素触发
  • error:JS发生错误时在 window 上触发,无法加载图像在 img 元素触发 ,无法加载嵌入内容在 object 内容触发
  • select:用户选中文本框(input、texterea)的一个或多个字符时触发
  • resize:当窗口或框架的大小发生变化时触发
  • scroll:用户滚动带滚动条的内容时触发

以上事件除了 DOMActivate 事件之外,在DOM2级规范中都归于HTML事件

检测以上特性,可使用以下代码:

var isSupported = document.implementation.hasFeature("HTMLEvents","2.0");

只有根据DOM2级标准实现的才会返回true ,以非标准方式支持以上事件的浏览器则会返回false

检测DOM3级事件:

var isSupported = document.implementation.hasFeature("UIEvents","3.0");

load事件

load事件作为JS中最常用的事件,当页面完全加载后,就会触发window上的load事件

而定义load事件有以下两种方式:

window.onload = function(){
alert("loaded");
}// 这里没有做浏览器兼容,兼容请参考我前面的文章

或:

<!DOCTYPE html>
<html>
<head>
<title>Load Event Example</title>
</head>
<body onload="alert('loaded')">
<body>
</html>

一般来说,在window上面发生的任何事件都可以在 body 元素中通过响应特性来指定

因为在HTML中无法访问 window 元素。实际上这只是一种向后兼容的权宜之计,但是所有浏览器都能很好地支持这种方式

不过最好还是使用第一种的JS的方式来指定

PS:DOM2规范指出应该在 document 而非 window 上面触发load事件,但是所有浏览器都在window上事件了 load事件以保证向后兼容

图像上也可以触发 load 事件,若我们需要在图像加载完成时给出提示,需要注意一点:

在我们创建新的 图像元素后需要先添加事件处理程序然后再指定 img 元素的src属性

PS:最重要的一点是:新图像元素不一定要添加到文档后才开始下载,只要设置了src属性就会开始下载

同样的功能也可以使用 DOM0 中的 image 对象实现

两者区别在于 image 对象无法添加到文档中,但是也有部分浏览器将 Image 对象以 img 元素实现

但是只有部分浏览器这样做,所以最好将这两者加以区分

在主流现代浏览器中,<script>元素也会触发load事件

不过新建的 script 元素只有在指定了 src 属性 并且将该元素添加到文档中后才会开始下载

所以对于 script 元素指定事件处理程序的先后顺序就不重要了

此外,IE和Opera的 link 元素也支持load事件,以供开发人员确定样式表是否加载完成

unload事件

与load事件对应的是unload事件

其在文档被完全卸载后触发,或者从一个页面切换到另外一个页面也会触发该事件

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

指定方式和 load 事件一样

不过不管是那种指定方式

都需要小心 unload 事件处理程序中的代码

因为是在页面卸载完成后才触发,所以页面加载后存在的对象此时都不一定存在了

所以在 unload 事件处理程序中操作DOM节点或者元素样式就会导致错误

resize事件

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

指定方式这里不再赘述

需要注意的是,不同浏览器的resize触发机制不同

除火狐之外的浏览器窗口每改变1px 都会触发一次,随着窗口大小的改变不断触发

而火狐只有在用户停止调整窗口大小时才会触发

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

scroll事件

虽然 scroll 事件在window 上触发,但是其实际表示的时页面中相应元素的变化

在混杂模式下可以通过 body 的 scrollLeft、scrollTop 来监测

而在标准模式下则会通过 html 元素来反映这一变化

window.onscroll = function(event){
if(document.compatMode ==="CSS1Compat"){
alert(document.documentElement.scrollTop);
} else {
alert(document.body.scrollTop);
}
}

与resize事件类似,scroll 事件也会在滚动期间重复触发,所以需要尽量保持事件处理程序代码的简单

Javascript高级编程学习笔记(61)—— 事件(5)UI事件的更多相关文章

  1. Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟

    事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...

  2. Javascript高级编程学习笔记(72)—— 模拟事件(2)IE事件模拟

    IE中的事件模拟 低版本的IE浏览器作为前端开发的一股清流,想避过都不行 虽然低版本IE正在逐步被市场淘汰,不得不承认IE8以下的浏览器依然占了不小的份额 所以这里大概介绍IE8以下的低版本IE中的事 ...

  3. Javascript高级编程学习笔记(60)—— 事件(4)事件类型

    事件类型 Web浏览器中可能发生的事件有许多种类型 不同类型的事件都有着自己独特的信息 在“DOM3级事件”规范中,规定了以下几类事件: UI事件    当用户与页面元素交互时触发 焦点事件    当 ...

  4. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

  5. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件

    键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...

  6. Javascript高级编程学习笔记(70)—— 事件(14)内存和性能

    由于事件处理程序是现代的web程序交互能力的提供者 所以在日常实践中,我们免不了要向页面中添加大量的事件处理程序(不管是用于用户交互还是用于统计用户数据) 在创建GUI(图形用户界面)的语言(如C#) ...

  7. Javascript高级编程学习笔记(69)—— 事件(13)触摸与手势事件

    触摸与手势事件 由于移动设备既没有鼠标也没有键盘,所以在为移动浏览器开发交互性网页时,常规的鼠标键盘事件根本不够用 所以早期的苹果为Safari 添加了一些与触摸相关的事件 随着后面Android的W ...

  8. Javascript高级编程学习笔记(68)—— 事件(12)设备事件

    设备事件 随着智能手机与平板电脑的普及,为了更好地让用户与这些设备进行交互 浏览器引入了一种新的方式,而一类新的事件也应运而生,这就是设备事件 W3C从2011年开始制定关于设备事件的草案 下面将会介 ...

  9. Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件

    DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...

随机推荐

  1. centos7 端口3306无法连接问题

    MySQL建用户的时候会指定一个host,默认是127.0.0.1/localhost,那么这个用户就只能本机访问,其它机器用这个用户帐号访问会提示没有权限,host改为%,表示允许所有机器访问. G ...

  2. .net webapi 接收 xml 格式数据的三种情况

    webapi 接收 xml 的三种方法 前段时间接到一个任务写一个小接口,要接收java端返回过来的短信xml数据. 刚拿到项目,我的第一想法是对方会以什么形式发送xml格式的数据给我呢,设想三种情况 ...

  3. shell速查

    Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell.bash由Brian Fox和Chet Ramey共同完成,是Bourn ...

  4. dotNet程序员的Java爬坑之旅(一)

    仔细想了下还是转java吧,因为后期不管是留在北京也好还是回老家也好,java的工作都会好找一点.现在的工作主要还是写.net,目标是下一次离职的时候可以找到一份全职的java工作,我一直都觉得实践才 ...

  5. Vb6调用C#生成的dll

    namespace ClassLibrary1 { [ClassInterface(ClassInterfaceType.AutoDispatch)]     //注意这行,这行是关键     pub ...

  6. HTML5-桌面提醒功能

    window.webkitNotifications.requestPermission(); statue = window.webkitNotifications.checkPermission( ...

  7. PM学习梳理--需求管理

  8. 如何选择合适的PHP版本

    PHP版本很多,包括32位64位以及线程安全与非线程安全在内的php版本多达几百个,应该如何选择PHP版本呢 PHP32和64的选择和区别 32bit的php的整型数据最大最小正负2GB左右(0x7F ...

  9. 【机器学习】K均值算法(II)

    k聚类算法中如何选择初始化聚类中心所在的位置. 在选择聚类中心时候,如果选择初始化位置不合适,可能不能得出我们想要的局部最优解. 而是会出现一下情况: 为了解决这个问题,我们通常的做法是: 我们选取K ...

  10. 图解HTTP第六章

    HTTP 报文 1>HTTP 报文 2>HTTP 请求报文 在请求中,HTTP 报文由方法.URI.HTTP 版本.HTTP 首部字段.报文主体(不一定需要)等部分构成. 3>HTT ...