浏览器中5种常用的事件解析


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于浏览器中常用的事件解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

表单事件

键盘事件

<input>, <textarea> 的值发生变化时触发。此外,打开 contenteditable 属性的元素,只要值发生变化,也会触发 input 事件。input 事件的一个特点,就是会连续触发,比如用户每次按下一次按键,就会触发一次input事件。

此类事件包括: keydown, keyup,

鼠标事件

select 事件当在<input>, <textarea>中选中文本时触发

change 事件当<input>, <select>, <textarea>的值发生变化时触发。它与 input 事件的最大不同,就是不会连续触发,只有当全部修改完成时才会触发,而且input事件必然会引发change事件。具体来说,分成以下几种情况:

  • 激活单选框(radio)或复选框(checkbox)时触发。

  • 用户提交时触发。比如,从下列列表(select)完成选择,在日期或文件输入框完成选择。

  • 当文本框或textarea元素的值发生改变,并且丧失焦点时触发。

  • reset事件当表单重置(所有表单成员变回默认值)时由form元素触发。

  • submit事件当表单数据向服务器提交时由form元素触发。

文档事件:

beforeunload

beforeunload 事件当窗口将要关闭,或者 document 和网页资源将要卸载时触发。它可以用来防止用户不当心关闭网页。该事件的默认动作就是关闭当前窗口或文档。如果在监听函数中,调用了 event.preventDefault(),或者对事件对象的 returnValue 属性赋予一个非空的值,就会自动跳出一个确认框,让用户确认是否关闭网页。如果用户点击“取消”按钮,网页就不会关闭。监听函数所返回的字符串,会显示在确认对话框之中:

1

2

3

4

5

6

7

window.addEventListener('beforeunload', function(event) {

  if(event.preventDefault){

    event.preventDefault();

  } else {

    event.returnValue = '你确认要离开吗?';

  }

});

unload 与 load

unload 事件在窗口关闭或者 document 对象将要卸载时触发,发生在 window, body, frameset 等对象上面。它的触发顺序排在 beforeunload, pagehide 事件后面。unload 事件只在页面没有被浏览器缓存时才会触发,换言之,如果通过按下“前进/后退”导致页面卸载,并不会触发 unload 事件。当 unload 事件发生时,document 对象处于一个特殊状态。所有资源依然存在,但是对用户来说都不可见,UI互动(window.open, alert, confirm方法等)全部无效。这时即使抛出错误,也不能停止文档的卸载。

load事件在页面加载成功时触发,error事件在页面加载失败时触发。注意,页面从浏览器缓存加载,并不会触发load事件。

这两个事件实际上属于进度事件,不仅发生在 document 对象,还发生在各种外部资源上面。浏览网页就是一个加载各种资源的过程,图像(image), 样式表(style sheet), 脚本(script), 视频(video), 音频(audio), Ajax请求(XMLHttpRequest)等等。这些资源和document对象, window对象, XMLHttpRequestUpload对象,都会触发 load 事件和 error 事件。

pageshow 与 pagehide

pageshow事件,pagehide事件: 默认情况下,浏览器会在当前会话(session)缓存页面,当用户点击“前进/后退”按钮时,浏览器就会从缓存中加载页面。
pageshow 事件在页面加载时触发,包括第一次加载和从缓存加载两种情况。如果要指定页面每次加载(不管是不是从浏览器缓存)时都运行的代码,可以放在这个事件的监听函数。第一次加载时,它的触发顺序排在load事件后面。从缓存加载时,load 事件不会触发,因为网页在缓存中的样子通常是 load 事件的监听函数运行后的样子,所以不必重复执行。同理,如果是从缓存中加载页面,网页内初始化的 JavaScript 脚本(比如 DOMContentLoaded 事件的监听函数)也不会执行。pageshow 事件有一个 persisted 属性,返回一个布尔值。页面第一次加载时,这个属性是false;当页面从缓存加载时,这个属性是true。

1

2

3

4

5

document.onpageshow = function(event){}

  if(event.persisted){

    //如果存缓存加载

  }

}

同样的,将这个属性设为 true,就表示页面要保存在缓存中;设为 false ,表示网页不保存在缓存中,这时如果设置了 unload 事件的监听函数,该函数将在 pagehide 事件后立即运行。如果页面包含 frame ,则 frame 页面的 pageshow 事件和 pagehide 事件,都会在主页面之前触发。

DOMContentLoaded 和 readystatechange

DOMContentLoaded 事件当 HTML 文档下载并解析完成以后,就会在 document 对象上触发 DOMContentLoaded 事件。这时,仅仅完成了 HTML 文档的解析(整张页面的DOM生成),所有外部资源(样式表, 脚本, iframe等等)可能还没有下载结束。也就是说,这个事件比 load 事件,发生时间早得多。注意,网页的 JavaScript 脚本是同步执行的,所以定义 DOMContentLoaded 事件的监听函数,应该放在所有脚本的最前面。否则脚本一旦发生堵塞,将推迟触发 DOMContentLoaded 事件。此外,IE8 不支持 DOMContentLoaded 事件,可以使用 readystatechange 事件代替。

readystatechange 事件发生在 Document 对象和 XMLHttpRequest 对象,当它的 readyState 属性发生变化时触发。

其他文档级事件

上面重点提到了 DOMContentLoaded, readystatechange, pageshow, pagehide, unload, load 和 beforeunload 事件,此外还有一下事件:

  • onafterprint: 文档打印之后运行的脚本

  • onbeforeprint: 文档打印之前运行的脚本

  • onbeforeunload: 文档卸载之前运行的脚本(上文已涉及)

  • onerror: 在错误发生时运行的脚本

  • onhaschange: 当文档已改变时运行的脚本

  • onload: 页面结束加载之后触发(上文已涉及)

  • onmessage: 在消息被触发时运行的脚本

  • onoffline: 当文档离线时运行的脚本

  • ononline: 当文档上线时运行的脚本

  • onpagehide: 当窗口隐藏时运行的脚本(上文已涉及)

  • onpageshow: 当窗口成为可见时运行的脚本(上文已涉及)

  • onpopstate: 当窗口历史记录改变时运行的脚本

  • onredo: 当文档执行撤销(redo)时运行的脚本

  • onresize: 当浏览器窗口被调整大小时触发

  • onstorage: 在 Web Storage 区域更新后运行的脚本

  • onundo: 在文档执行 undo 时运行的脚本

  • onscroll: 事件在文档或文档元素滚动时执行脚本

鼠标事件 与 MouseEvent对象

1

new MouseEvent(typeArg, mouseEventInit);

内置的鼠标事件包括:

  1. mousedown: 按下鼠标

  2. mouseup: 鼠标抬起

  3. click: 点击

  4. dblclick: 双击

  5. mousemove: 鼠标移动

  6. mouseover: 鼠标移入,冒泡

  7. mouseout: 鼠标移出,冒泡

  8. mouseenter: 鼠标移入,不冒泡

  9. mouseleave: 鼠标移出,不冒泡

  10. contextmenu: 右键菜单

  11. wheel: 滚轮事件

其具有如下常用属性:

  • altKey,ctrlKey,metaKey,shiftKey属性返回一个布尔值,表示鼠标事件发生时,是否按下某个键;

  • button 返回事件的鼠标键信息, 值为0(左键), 1或4(中键, 4为IE中的值),2(右键),可通过switch来选择执行分之);

  • buttons 属性返回一个3个比特位的值,表示同时按下了哪些键

  • clientX,clientY 返回鼠标位置相对于浏览器窗口左上角的坐标,单位为像素

  • screenX,screenY 返回鼠标位置相对于屏幕左上角的坐标,单位为像素

  • movementX,movementY 返回一个位移,单位为像素,表示当前位置与上一个 mousemove 事件之间的距离,在数值上:

currentEvent.movementX = currentEvent.screenX - previousEvent.screenX
currentEvent.movementY = currentEvent.screenY - previousEvent.screenY
  • relatedTarget属性返回事件的次要相关节点,即和target属性对应的节点,如: mouseout target 指将要离开的节点,relatedTarget 指将要进入的节点。对于那些没有次要相关节点的事件,该属性返回null

  • wheel 事件是与鼠标滚轮相关的事件,浏览器提供一个 WheelEvent 构造函数 new WheelEvent(typeArg, mouseEventInit)

  • deltaX: 返回一个数值,表示滚轮的水平滚动量

  • deltaY: 返回一个数值,表示滚轮的垂直滚动量

  • deltaZ: 返回一个数值,表示滚轮的Z轴滚动量

  • deltaMode: 返回一个数值,表示滚动的单位,适用于上面三个属性。0表示像素,1表示行,2表示页

键盘事件 KeyboardEvent 对象

1

构造函数 new KeyboardEvent(typeArg, KeyboardEventInit)

键盘事件包括keydown(按下键盘时触发该事件),keypress(只要按下的键并非Ctrl, Alt, Shift和Meta,就接着触发keypress事件), keyup(松开键盘时触发该事件)

  • altKey,ctrlKey,metaKey,shiftKey: 返回一个布尔值,表示是否按下对应的键

  • key: 返回一个字符串,表示按下的键名。如果同时按下一个控制键和一个符号键,则返回符号键的键名

  • keyCode: 返回按键的 ASCII 码,注意: 这里是不区分大小写的,A键不论输出 A 还是 a keyCode 都是68。在 IE 中使用 witch 属性

进度事件 ProgressEvent对象

1

2

3

4

5

new ProgressEvent(type, {

  lengthComputable: aBooleanValue,    // false as default

  loaded: aNumber,                    // 0 as default

  total: aNumber                      // 0 as default

});

进度事件用来描述一个事件进展的过程,比如XMLHttpRequest对象发出的HTTP请求的过程, <img>, <audio>, <video>, <style>, <link>加载外部资源的过程,包括下载和上传。通常包括以下事件:

  1. abort事件: 当进度事件被中止时触发。如果发生错误,导致进程中止,不会触发该事件。

  2. error事件: 由于错误导致资源无法加载时触发,不会冒泡。error 事件的监听函数最好放在如 img 元素的 HTML 属性中。

  3. load事件: 进度成功结束时触发。

  4. loadstart事件: 进度开始时触发。

  5. loadend事件: 进度停止时触发,发生顺序排在error事件abort事件load事件后面。loadend事件的监听函数可以用来取代abort事件/load事件/error事件的监听函数,loadend事件本身不提供关于进度结束的原因,但可以用它来做所有进度结束场景都需要做的一些操作。

  6. progress事件: 当操作处于进度之中,由传输的数据块不断触发。

  7. timeout事件: 进度超过限时触发

这类事件具有以下属性:

  • lengthComputable: 返回一个布尔值,表示当前进度是否具有可计算的长度。如果为false,就表示当前进度无法测量。

  • total: 返回一个数值,表示当前进度的总长度。如果是通过 HTTP 下载某个资源,表示内容本身的长度,不含 HTTP 头部的长度。如果 lengthComputable 属性为 false,则 total 属性就无法取得正确的值。

  • loaded: 返回一个数值,表示当前进度已经完成的数量。该属性除以total属性,就可以得到目前进度的百分比。

1

2

3

4

//进度计算

if (e.lengthComputable){

  var percentComplete = e.loaded / e.total;

}

拖拽事件 DragEvent 对象

1

new DragEvent(type, DragEventInit);

拖拽指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里。拖拽的对象有好几种,包括 Element 节点, 图片, 链接, 选中的文字等等。在 HTML 网页中,除了 Element 节点默认不可以拖拽,其他(图片, 链接, 选中的文字)都是可以直接拖拽的。为了让 Element 节点可拖拽,可以将该节点的 draggable 属性设为 true。draggable 属性可用于任何 Element 节点,但是图片(img 元素)和链接(a 元素)不加这个属性,就可以拖拽。对于它们,用到这个属性的时候,往往是将其设为 false,防止拖拽。注意,一旦某个 Element 节点的 draggable 属性设为 true,就无法再用鼠标选中该节点内部的文字或子节点了。

阅读剩余部分

相关阅读 >>

javascript生成一次性密码(otp)

html怎么用title属性让鼠标悬停处显示文字

html文本框怎么设置只读

javascript如何计算除法

javascript怎么设置按钮属性

HTML5中布尔属性的hidden

html input是什么

go元素的关键字所在--chan通道

javascript有什么优点

html frame标签怎么使用?frame标签的用法介绍(附实例)

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...