JavaScript事件类型中UI事件详解


Posted in Javascript onJanuary 14, 2016

“DOM3级事件”规定了一下几类事件

UI事件,当用户与页面上的元素交互时除法;
焦点事件,元素获得或失去焦点;
鼠标事件,通过鼠标在页面上执行操作;
滚轮事件,使用鼠标滚轮或类似设备;
文本事件,当用户在文档中输入文本;
键盘事件,通过键盘在页面上执行操作;
合成事件,当为IME(Input Method Editor,输入法编辑器)输入字符时除法;
变动事件(mutation),底层DOM结构发生变化;
变动名称事件,当元素或属性名变动时,此类事件已被废弃。
下文着重说明UI事件的内容

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

DOMActivate,元素已经被用户操作(鼠标或键盘)激活。已经被废弃。
load,页面完全加载完后在window上触发,所有框架加载完毕后在框架集上触发,图像加载完毕在img元素上触发,当嵌入内容加载完毕在object元素上触发。
unload,页面完全卸载(window),所有框架都卸载后(框架集),嵌入内容卸载完毕后(object)。
abort,当用户停止下载过程,如果嵌入内容没有加载完,则在object元素上除法。
error,当js错误时(window),当无法加载图像时(img),当无法加载嵌入内容时(object),当一或多个框架无法加载(框架集)。
select,当用户选择文本框(texterea或input)中的一个或多个字符时触发。
resize:当窗口或框架的大小变化时(window或框架)
scroll:当用户滚动带滚动条的元素中的内容时(在该元素上触发)

load事件

js中最常用的一个事件就是load,当页面完全加载完毕后(所有图像、js文件、css文件等),就会触发window上面的load事件。如:

window.onload = function () {
  console.log('loaded');
}

一般来说,在window上面发生的任何事件都可以在body元素中通过相应的特征来指定,因为在HTML中无法访问window元素。这只是为了保证向后兼容的一种权宜之计。如:

document.body.onload = function () {
  console.log('loaded');
}

同样也可以在图像元素上使用:

var img = document.getElementById("img");
img.onload = function () {
  console.log(event.target.src);
}

又如下面代码,在window加载完毕后,想body追加一个img元素,在img元素加载完毕后再提示图像的src以及一个提示信息:

window.onload = function () {
  var image = document.createElement("img");
  document.body.appendChild(image);
  image.src = "scr.png"
  image.onload = function () {
    console.log(event.target.src);
    console.log('img is loaded');
  };
}

另外,script元素也以非标准的方式支持load事件。

部分浏览器还支持link元素上的load事件,以便开发人员确定样式表是否加载完毕。

unload事件

这个事件在文档被完全卸载后触发。只要用户从一个页面切换到另一个页面,就会发生unload事件。

window.onunload = function () {
  alert("8888");
}

应该小心编写onunload事件处理程序中的代码,因为页面加载后存在的那些对象,此时就不一定存在了。

resize事件

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

window.onresize = function () {
  console.log(document.body.clientWidth);
}

因为部分浏览器在窗口变化了1像素就触发该事件,并随着变化不断触发;也有浏览器则只会在用户停止调整窗口大小时才会触发。所以应该避免在这个事件的处理程序中加入大量的计算代码,避免浏览器反应变慢。

scroll事件

该事件虽然在window对象上发生的,但实际表示的是页面中响应元素的变化。混杂模式下,通过body元素的scrollLeft和scrollTop来监控变化;而在非标准模式下,除Safari之外的所有浏览器都会通过html元素(documentElement)来反映这个变化:

window.onscroll = function () {
  console.log(document.documentElement.scrollTop || document.body.scrollTop);
}

因为浏览器随着变化不断触发,所以应该避免在这个事件的处理程序中加入大量的计算代码,避免浏览器反应变慢。

abort事件

关于abort、error、select等事件请关注后续update

error事件

关于abort、error、select等事件请关注后续update

select事件

关于abort、error、select等事件请关注后续update

Javascript 相关文章推荐
详细讲解JS节点知识
Jan 31 Javascript
jQuery图片滚动图片的效果(另类实现)
Jun 02 Javascript
鼠标滚轴控制文本框值的JS代码
Nov 19 Javascript
js创建对象的方法汇总
Jan 07 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
Windows下Node.js安装及环境配置方法
Sep 18 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
Apr 25 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
Nov 01 Javascript
JavaScript事件 "事件对象"的注意要点
Jan 14 #Javascript
详解JavaScript中localStorage使用要点
Jan 13 #Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 #Javascript
jquery悬浮提示框完整实例
Jan 13 #Javascript
js和jquery实现监听键盘事件示例代码
Jun 24 #Javascript
jQuery简单操作cookie的插件实例
Jan 13 #Javascript
AngularJS单选框及多选框实现双向动态绑定
Jan 13 #Javascript
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
Python 探针的实现原理
2016/04/23 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python微信公众号之关键词自动回复
2018/06/15 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
python:接口间数据传递与调用方法
2018/12/17 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
架构师岗位职责
2013/11/18 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
抽样调查项目计划书
2014/04/24 职场文书
食品安全工作方案
2014/05/07 职场文书
学校清明节活动总结
2014/07/04 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
质检员岗位职责
2015/02/03 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏