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. zabbix添加nginx监控

    nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等,可以利用这个功能编写zabbix监控 ...

  2. dsPIC30F 细节点问题不定期更新ing

    知识点1 TRISD: I/O 引脚 方向控制 寄存器 (1--input, 0--Output)LATD:  I/O 引脚 输出锁存器PORTD: 是双向I/O 端口 备注:LATD = 0x000 ...

  3. Layui 写一个简单的后台页面

    参考如下: 1.layui 官方文档 http://www.layui.com/doc/ 2.https://blog.csdn.net/huyanliang/article/details/7796 ...

  4. bittorrent 学习(三) MSG

    msg.c中 int转化 char[4]  char[4]转化int的函数 如下(有多种方案) ]) { c[] = i % ; c[] = (i - c[]) / % ; c[] = (i - c[ ...

  5. HTTP之请求消息Request

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...

  6. mysql8 出现1521错误解决方法

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 ALTER USER 'ro ...

  7. left join中where与on的区别

    举例进行说明,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两个表来对MySQL关联left join 条件on与where 条件的不同之处进 ...

  8. Siamese Neural Networks for One-shot Image Recognition

    one-shot learning简介 这是迁移学习的两种极端形式 zero-shot learning 指的是我们之前没有这个类别的训练样本,但是我们可以学习到一个映射X->Y, 如果这个映射 ...

  9. django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: ...

    出现此问题的解决方法: 在mysql中创建一个和settings.py里设置的mysql  'name'名字一样的数据库就可以了.

  10. 计算机爱好者协会技术贴markdown第二期

    上一期我们学了多级标题,加粗,加斜以及蛮好看的小方块,这一期来继续学习吧 Txt版本: *上一期说这样可以加斜* _其实这样也可以加斜_ **上一期说这样可以加粗** __其实这样也可以加粗__ ** ...