Javascript高级编程学习笔记(61)—— 事件(5)UI事件
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事件的更多相关文章
- Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟
事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...
- Javascript高级编程学习笔记(72)—— 模拟事件(2)IE事件模拟
IE中的事件模拟 低版本的IE浏览器作为前端开发的一股清流,想避过都不行 虽然低版本IE正在逐步被市场淘汰,不得不承认IE8以下的浏览器依然占了不小的份额 所以这里大概介绍IE8以下的低版本IE中的事 ...
- Javascript高级编程学习笔记(60)—— 事件(4)事件类型
事件类型 Web浏览器中可能发生的事件有许多种类型 不同类型的事件都有着自己独特的信息 在“DOM3级事件”规范中,规定了以下几类事件: UI事件 当用户与页面元素交互时触发 焦点事件 当 ...
- Javascript高级编程学习笔记(57)—— 事件(1)事件流
事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
- Javascript高级编程学习笔记(70)—— 事件(14)内存和性能
由于事件处理程序是现代的web程序交互能力的提供者 所以在日常实践中,我们免不了要向页面中添加大量的事件处理程序(不管是用于用户交互还是用于统计用户数据) 在创建GUI(图形用户界面)的语言(如C#) ...
- Javascript高级编程学习笔记(69)—— 事件(13)触摸与手势事件
触摸与手势事件 由于移动设备既没有鼠标也没有键盘,所以在为移动浏览器开发交互性网页时,常规的鼠标键盘事件根本不够用 所以早期的苹果为Safari 添加了一些与触摸相关的事件 随着后面Android的W ...
- Javascript高级编程学习笔记(68)—— 事件(12)设备事件
设备事件 随着智能手机与平板电脑的普及,为了更好地让用户与这些设备进行交互 浏览器引入了一种新的方式,而一类新的事件也应运而生,这就是设备事件 W3C从2011年开始制定关于设备事件的草案 下面将会介 ...
- Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件
DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...
随机推荐
- js真乃神器也
var a =document.getElementsByClassName('SearchResult__title-text'); for (i = 0;i < a.length;i++){ ...
- jna调用c++的dll
import java.util.ArrayList; import java.util.List; import com.sun.jna.Structure; public class MyStru ...
- 分布式系统-主键唯一id,订单编号生成-雪花算法-SnowFlake
分布式系统下 我们每台设备(分布式系统-独立的应用空间-或者docker环境) * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作 ...
- VirtualBox 桥接模式,虚拟机ping不通宿主机
虚拟机为window server 2012 参考链接:https://blog.csdn.net/Leon_190/article/details/84937045#commentBox 该做的都做 ...
- unity接入谷歌ADMob注意事项
应用不显示广告,可能是广告sdk 依赖项没有注册 dependencies { implementation fileTree(dir: 'bin', include: ['*.jar']) impl ...
- strcat的用法
原型: char *strcat(char *str1,char *str2); strcat的实现: char* MyStrcat(char *dst, const char*src) { if ( ...
- Ansible安装及OS规划
Ansible安装 1.以管理用户mtnsadmin连接服务器后下载安装包(-O表示将下载的文件存放到指定的文件夹下,同时重命名下载的文件) sudo wget -O /etc/yum.re ...
- 25. pt-slave-restart
pt-slave-restart -h 192.168.100.103 -P 3306 -u admin -p admin \--error-numbers 1032 set global slave ...
- python基础之Day24
1.补充内置函数 2.反射 什么是? 通过字符串操作类或者对象的属性 hasattri(a,"b") 判断能否访问到a.b setattri(a,"b",c) ...
- the default terminal(gnome-terminal) start up fail
Platform: Ubuntu 16.04 LTS Reason: variable $LANG on system is empty Solution: localectl set-locale ...