ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## HTML DOM 事件 [https://developer.mozilla.org/zh-CN/docs/Web/Events](https://developer.mozilla.org/zh-CN/docs/Web/Events) Web平台提供了多种方式来获取 DOM events 的通知。两种常见的风格是:广义 addEventListener() 和一组特定的on-event处理器。 触发事件: ~~~js 方法1: /* 参数: 1.事件的字符串,不要on 2.回调函数,当事件触发时该函数会被调用 3·是否在捕获阶段触发事件,需要一个布尔值,一般都传false 使用addEventListener()可以同时为一个元素的相同事件同时绑定多个响应函数, 这样当事件被触发时,响应函数将会按照函数的绑定顺序执行,IE8及以下不支持此方法 */ document.addEventListener('keyup', (event) => { const keyName1 = event.key; //... }, false); document.addEventListener('keyup', (event) => { const keyName2 = event.key; //... }, false); /* 在IE8中可以使用attachEvent()来绑定事件 参数: 1.事件的字符串,要on 2.回调函数 */ element.attachEvent('onclick',function() { //... }); //方法2:on-event处理器是由DOM元素提供的一组属性,以帮助管理元素如何对事件反应 element.onclick=function(event){ } //除了标签对象以外,window, document, XMLHttpRequest,AudioNode,AudioContext 等等也具有on-event ~~~ 兼容: ``` /*定义一个函数,用来为指定元素绑定响应函数 addEventListener()中的this,是绑定事件的对象 attachEvent()中的this, 是window 需要统一两个方法this 参数: obj要绑定事件的对象 eventstr事件的字符串 callback回调函数 */ function bind(obj,eventStr,callback){ if(obj.addEventListener){ obj.addEventListener(eventStr,callback,false); }else{ //obj.attachEvent("on"+eventStr,callback); //统一执行顺序:callback.call(obj) obj.attachEvent("on"+eventStr,function(){ callback.call(obj); }); } } ``` 事件的传播 关于事件的传播网景公司和微软公司有不同的理解 -微软公司认为事件应该是由内向外传播,也就是当事件触发时,应该先触发当前元素上的事件然后再向当前元素的祖先元素上传播,也就说事件应该在冒泡阶段执行 -网景公司认为事件应该是由外向内传播的,也就是当前事件触发时,应该先触发当前元素的最外层的祖先元素的事件然后在向内传播给后代元素 -W3C综合了两个公司的方案,将事件传播分成了三个阶段 1,捕获阶段:在捕获阶段时从最外层的祖先元素,向目标元素进行事件的捕获,但是默认此时不会触发事件 2.目标阶段:事件捕获到目标元素,捕获结束开始在目标元素上触发事件 3.冒泡阶段:事件从目标元素向他的祖先元素传递,依饮触发祖先元素上的事件 如果希望在捕获阶段就触发事件,可以将addEventListener()的第三个参数设置为true一般情况下我们不会希望在捕获阶段触发事件,所以这个参数一般都是false IE8及以下没有捕获阶段 ## 鼠标事件 | 属性 | 描述 | DOM | | :-- | :-- | :-- | | [onclick](https://www.runoob.com/jsref/event-onclick.html) | 当用户点击某个对象时调用的事件句柄。 | 2 | | [oncontextmenu](https://www.runoob.com/jsref/event-oncontextmenu.html) | 在用户点击鼠标右键打开上下文菜单时触发 |   | | [ondblclick](https://www.runoob.com/jsref/event-ondblclick.html) | 当用户双击某个对象时调用的事件句柄。 | 2 | | [onmousedown](https://www.runoob.com/jsref/event-onmousedown.html) | 鼠标按钮被按下。 | 2 | | [onmouseenter](https://www.runoob.com/jsref/event-onmouseenter.html) | 当鼠标指针移动到元素上时触发。 | 2 | | [onmouseleave](https://www.runoob.com/jsref/event-onmouseleave.html) | 当鼠标指针移出元素时触发 | 2 | | [onmousemove](https://www.runoob.com/jsref/event-onmousemove.html) | 鼠标被移动。 | 2 | | [onmouseover](https://www.runoob.com/jsref/event-onmouseover.html) | 鼠标移到某元素之上。 | 2 | | [onmouseout](https://www.runoob.com/jsref/event-onmouseout.html) | 鼠标从某元素移开。 | 2 | | [onmouseup](https://www.runoob.com/jsref/event-onmouseup.html) | 鼠标按键被松开。 | 2 | ## 键盘事件 | 属性 | 描述 | DOM | | :-- | :-- | :-- | | [onkeydown](https://www.runoob.com/jsref/event-onkeydown.html) | 某个键盘按键被按下。 | 2 | | [onkeypress](https://www.runoob.com/jsref/event-onkeypress.html) | 某个键盘按键被按下并松开。 | 2 | | [onkeyup](https://www.runoob.com/jsref/event-onkeyup.html) | 某个键盘按键被松开。 | 2 | ## 框架/对象(Frame/Object)事件 | 属性 | 描述 | DOM | | :-- | :-- | :-- | | [onabort](https://www.runoob.com/jsref/event-onabort.html) | 图像的加载被中断。 ( ) | 2 | | [onbeforeunload](https://www.runoob.com/jsref/event-onbeforeunload.html) | 该事件在即将离开页面(刷新或关闭)时触发 | 2 | | [onerror](https://www.runoob.com/jsref/event-onerror.html) | 在加载文档或图像时发生错误。 ( , 和 ) |   | | [onhashchange](https://www.runoob.com/jsref/event-onhashchange.html) | 该事件在当前 URL 的锚部分发生修改时触发。 |   | | [onload](https://www.runoob.com/jsref/event-onload.html) | 一张页面或一幅图像完成加载。 | 2 | | [onpageshow](https://www.runoob.com/jsref/event-onpageshow.html) | 该事件在用户访问页面时触发 | | | [onpagehide](https://www.runoob.com/jsref/event-onpagehide.html) | 该事件在用户离开当前网页跳转到另外一个页面时触发 | | | [onresize](https://www.runoob.com/jsref/event-onresize.html) | 窗口或框架被重新调整大小。 | 2 | | [onscroll](https://www.runoob.com/jsref/event-onscroll.html) | 当文档被滚动时发生的事件。 | 2 | | [onunload](https://www.runoob.com/jsref/event-onunload.html) | 用户退出页面。 ( 和 ) | 2 | ## 表单事件 | 属性 | 描述 | DOM | | --- | --- | --- | | [onblur](https://www.runoob.com/jsref/event-onblur.html) | 元素失去焦点时触发 | 2 | | [onchange](https://www.runoob.com/jsref/event-onchange.html) | 该事件在表单元素的内容改变时触发( , , , 和 ) | 2 | | [onfocus](https://www.runoob.com/jsref/event-onfocus.html) | 元素获取焦点时触发 | 2 | | [onfocusin](https://www.runoob.com/jsref/event-onfocusin.html) | 元素即将获取焦点时触发 | 2 | | [onfocusout](https://www.runoob.com/jsref/event-onfocusout.html) | 元素即将失去焦点时触发 | 2 | | [oninput](https://www.runoob.com/jsref/event-oninput.html) | 元素获取用户输入时触发 | 3 | | [onreset](https://www.runoob.com/jsref/event-onreset.html) | 表单重置时触发 | 2 | | [onsearch](https://www.runoob.com/jsref/event-onsearch.html) | 用户向搜索域输入文本时触发 ( ) |   | | [onselect](https://www.runoob.com/jsref/event-onselect.html) | 用户选取文本时触发 ( 和 ) | 2 | | [onsubmit](https://www.runoob.com/jsref/event-onsubmit.html) | 表单提交时触发 | 2 | ## 剪贴板事件 | 属性 | 描述 | DOM | | --- | --- | --- | | [oncopy](https://www.runoob.com/jsref/event-oncopy.html) | 该事件在用户拷贝元素内容时触发 |   | | [oncut](https://www.runoob.com/jsref/event-oncut.html) | 该事件在用户剪切元素内容时触发 |   | | [onpaste](https://www.runoob.com/jsref/event-onpaste.html) | 该事件在用户粘贴元素内容时触发 |   | ## 打印事件 | 属性 | 描述 | DOM | | --- | --- | --- | | [onafterprint](https://www.runoob.com/jsref/event-onafterprint.html) | 该事件在页面已经开始打印,或者打印窗口已经关闭时触发 |   | | [onbeforeprint](https://www.runoob.com/jsref/event-onbeforeprint.html) | 该事件在页面即将开始打印时触发 |   | ## 拖动事件 | 事件 | 描述 | DOM | | --- | --- | --- | | [ondrag](https://www.runoob.com/jsref/event-ondrag.html) | 该事件在元素正在拖动时触发 |   | | [ondragend](https://www.runoob.com/jsref/event-ondragend.html) | 该事件在用户完成元素的拖动时触发 |   | | [ondragenter](https://www.runoob.com/jsref/event-ondragenter.html) | 该事件在拖动的元素进入放置目标时触发 |   | | [ondragleave](https://www.runoob.com/jsref/event-ondragleave.html) | 该事件在拖动元素离开放置目标时触发 |   | | [ondragover](https://www.runoob.com/jsref/event-ondragover.html) | 该事件在拖动元素在放置目标上时触发 |   | | [ondragstart](https://www.runoob.com/jsref/event-ondragstart.html) | 该事件在用户开始拖动元素时触发 |   | | [ondrop](https://www.runoob.com/jsref/event-ondrop.html) | 该事件在拖动元素放置在目标区域时触发 |   | ## 多媒体(Media)事件 | 事件 | 描述 | DOM | | --- | --- | --- | | [onabort](https://www.runoob.com/jsref/event-onabort-media.html) | 事件在视频/音频(audio/video)终止加载时触发。 |   | | [oncanplay](https://www.runoob.com/jsref/event-oncanplay.html) | 事件在用户可以开始播放视频/音频(audio/video)时触发。 |   | | [oncanplaythrough](https://www.runoob.com/jsref/event-oncanplaythrough.html) | 事件在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。 |   | | [ondurationchange](https://www.runoob.com/jsref/event-ondurationchange.html) | 事件在视频/音频(audio/video)的时长发生变化时触发。 |   | | onemptied | 当期播放列表为空时触发 |   | | [onended](https://www.runoob.com/jsref/event-onended.html) | 事件在视频/音频(audio/video)播放结束时触发。 |   | | [onerror](https://www.runoob.com/jsref/event-onerror-media.html) | 事件在视频/音频(audio/video)数据加载期间发生错误时触发。 |   | | [onloadeddata](https://www.runoob.com/jsref/event-onloadeddata.html) | 事件在浏览器加载视频/音频(audio/video)当前帧时触发触发。 |   | | [onloadedmetadata](https://www.runoob.com/jsref/event-onloadedmetadata.html) | 事件在指定视频/音频(audio/video)的元数据加载后触发。 |   | | [onloadstart](https://www.runoob.com/jsref/event-onloadstart.html) | 事件在浏览器开始寻找指定视频/音频(audio/video)触发。 |   | | [onpause](https://www.runoob.com/jsref/event-onpause.html) | 事件在视频/音频(audio/video)暂停时触发。 |   | | [onplay](https://www.runoob.com/jsref/event-onplay.html) | 事件在视频/音频(audio/video)开始播放时触发。 |   | | [onplaying](https://www.runoob.com/jsref/event-onplaying.html) | 事件在视频/音频(audio/video)暂停或者在缓冲后准备重新开始播放时触发。 |   | | [onprogress](https://www.runoob.com/jsref/event-onprogress.html) | 事件在浏览器下载指定的视频/音频(audio/video)时触发。 |   | | [onratechange](https://www.runoob.com/jsref/event-onratechange.html) | 事件在视频/音频(audio/video)的播放速度发送改变时触发。 |   | | [onseeked](https://www.runoob.com/jsref/event-onseeked.html) | 事件在用户重新定位视频/音频(audio/video)的播放位置后触发。 |   | | [onseeking](https://www.runoob.com/jsref/event-onseeking.html) | 事件在用户开始重新定位视频/音频(audio/video)时触发。 |   | | [onstalled](https://www.runoob.com/jsref/event-onstalled.html) | 事件在浏览器获取媒体数据,但媒体数据不可用时触发。 |   | | [onsuspend](https://www.runoob.com/jsref/event-onsuspend.html) | 事件在浏览器读取媒体数据中止时触发。 |   | | [ontimeupdate](https://www.runoob.com/jsref/event-ontimeupdate.html) | 事件在当前的播放位置发送改变时触发。 |   | | [onvolumechange](https://www.runoob.com/jsref/event-onvolumechange.html) | 事件在音量发生改变时触发。 |   | | [onwaiting](https://www.runoob.com/jsref/event-onwaiting.html) | 事件在视频由于要播放下一帧而需要缓冲时触发。 |   | ## 动画事件 | 事件 | 描述 | DOM | | --- | --- | --- | | [animationend](https://www.runoob.com/jsref/event-animationend.html) | 该事件在 CSS 动画结束播放时触发 |   | | [animationiteration](https://www.runoob.com/jsref/event-animationiteration.html) | 该事件在 CSS 动画重复播放时触发 |   | | [animationstart](https://www.runoob.com/jsref/event-animationstart.html) | 该事件在 CSS 动画开始播放时触发 |   | ## 过渡事件 | 事件 | 描述 | DOM | | --- | --- | --- | | [transitionend](https://www.runoob.com/jsref/event-transitionend.html) | 该事件在 CSS 完成过渡后触发。 |   | ## 其他事件 | 事件 | 描述 | DOM | | --- | --- | --- | | onmessage | 该事件通过或者从对象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息时触发 |   | | onmousewheel | 已废弃。使用[onwheel](https://www.runoob.com/jsref/event-onwheel.html)事件替代 |   | | [ononline](https://www.runoob.com/jsref/event-ononline.html) | 该事件在浏览器开始在线工作时触发。 |   | | [onoffline](https://www.runoob.com/jsref/event-onoffline.html) | 该事件在浏览器开始离线工作时触发。 |   | | onpopstate | 该事件在窗口的浏览历史(history 对象)发生改变时触发。 |   | | [onshow](https://www.runoob.com/jsref/event-onshow.html) | 该事件当 元素在上下文菜单显示时触发 |   | | onstorage | 该事件在 Web Storage(HTML 5 Web 存储)更新时触发 |   | | [ontoggle](https://www.runoob.com/jsref/event-ontoggle.html) | 该事件在用户打开或关闭 元素时触发 |   | | [onwheel](https://www.runoob.com/jsref/event-onwheel.html) | 该事件在鼠标滚轮在元素上下滚动时触发 |   |