JavaScript DOM 事件总结
前端 JavaScript DOM 和 BOM 学习目录
4. DOM attribute property style属性 className属性 classList属性 Data
developer.mozilla.org/zh-CN/docs/…查阅文档
同时还具有其他的事件类型
- 动画事件 用来实现的是我们的相应动态状态的改变事件
- 剪切板事件 用于内容事件剪切,赋值粘贴的事件
- 文本输入事件 和文本输入相关的事件
- CSS变换事件 当 CSS 变换开始、停止或取消等事件发生时发出通知
- 数据库事件 与数据库操作相关的事件:打开、关闭、事务、错误
- 拖放,滚动事件 拖动和滚轮事件派生自鼠标事件
- 焦点事件 与元素获得和失去焦点相关的事件
- 全屏事件 用于在全屏和窗口模式切换或切换期间发生错误时发送通知
- 游戏手柄事件 与 Gamepad API 相关的事件
- 手势事件
- 键盘事件 与使用键盘相关的事件
- 加载卸载文档事件 在加载或卸载文档时触发的事件
- 清单事件 与安装渐进式 web 应用清单相关的事件
- 媒体事件 与媒体使用(包括媒体捕捉与媒体流 API、Web Audio API、画中画 API,等等)相关的事件
- 消息事件 与窗口从另一个浏览上下文接受消息相关的事件
- 鼠标事件 与计算机鼠标相关的事件
- 网络连接事件 与获得和失去网络连接相关的事件
- 支付事件 与支付请求 API 相关的事件
- 性能事件 与任何性能相关的规范分组为 Performance API 的相关事件
- 网络套接字事件 与 WebSockets API 相关的事件
- 实时通讯事件 与 WebRTC API 相关的事件
- worker事件 与 Web Workers API、Service Worker API、Broadcast Channel API 和 Channel Messaging API 相关的事件
DOM 鼠标事件
属性名 描述 click 当用户点击时触发的事件 contextmenu 当用户点击鼠标右键触发的功能 dbclick 当用户双击鼠标触发的功能 mousedown 鼠标按钮按下的时候触发的事件 mouseup 鼠标按钮移除时触发的事件 mouseover 鼠标移动到某个元素上的时候触发的事件(支持冒泡) mouseout 鼠标从某个元素上面移开触发的事件(支持冒泡) mouseenter 鼠标移动到某个元素上的时候触发的事件(不支持冒泡) mouseleave 鼠标从某个元素上面移开触发的事件(不支持冒泡) mousemove 鼠标被移开时候触发的事件 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .box { width: 100px; height: 100px; background-color: skyblue; } .box:hover { background-color: darkred; } </style> </head> <body> <div class="box"></div> <script> /** * addEventListener * 注意我们监听事件的话是具有三种可选值的写入的 * type 就是事件类型 * listener 就是我们的鼠标实现监听事件的时候触发的事件函数 * options 就是实现的是决定我们的事件流类型 */ var boxEl = document.querySelector(".box") // 开始实现添加不同的事件 boxEl.addEventListener("click", function(event) { console.log(`${event.currentTarget}`); }) boxEl.addEventListener("contextmenu", function(event) { console.log(`点击了打开了菜单`) event.preventDefault() }) boxEl.addEventListener("mouseover", function(event) { event.currentTarget.classList.add("hover") }) boxEl.addEventListener("mouseout", function(event) { event.currentTarget.classList.remove("hover") }) boxEl.addEventListener("mousemove", function(event) { console.log("鼠标移动了") event.stopPropagation() }) boxEl.addEventListener("mousedown", function(event) { console.log("鼠标按下了") }) boxEl.addEventListener("mouseup", function(event) { console.log("鼠标抬起了") }) </script> </body> </html>
DOM 键盘事件
属性 描述 onkeydown 键盘中某个按键被按下时触发的事件 onkeypress 键盘中某个按键被按下时触发的事件 onkeyup 键盘中某个按键被松开时触发的事件 down 这个按下的事件首先实现发生
press 发生在文本被输入的时候触发的事件
up 发生在文本输入完成的时候触发的事件
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <input type="text"> <script> var inputEl = document.querySelector("input") inputEl.onkeydown = function(e) { console.log(`${e.currentTarget} 被点击了 `); } inputEl.onkeypress = function(e) { console.log(`${e.currentTarget} 正在输入内容`) } inputEl.onkeyup = function(e) { console.log(`${e.currentTarget} 输入内容完毕`) } </script> </body> </html>通过上面的例子我们就可以知道,事件触发的顺序就是:
down -> press -> up有的时候我们为了可以实现知道我们的键盘事件到底是什么
这个时候我们就可以实现使用 event 中的两个属性
event.key | event.code注意的是,我们的 key 是需要进行区分大小写的
然而我们的 code 只是我们的键盘中的某些键浏览器对其进行的编码抽象,不区分大小写,这个就是我们的键码
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> window.addEventListener('keydown', function(e) { e.stopPropagation() console.log(e.code) switch (e.code) { case 'ArrowDown' || 'KeyS': console.log("用户点击了向下") break case 'ArrowUp' || 'KeyW': console.log("用户点击了向上") break case 'ArrowRight' || 'KeyD': console.log("用户点击了向右") break case 'ArrowLeft' || 'KeyA': console.log("用户点击了向左") break } }) </script> </body> </html>
DOM 表单事件
属性 描述 onchange 当我们表单中的内容发生变化的时候触发的事件 oninput 元素获取用户输入时触发的事件 onfocus 元素实现获取焦点的时候触发的事件 onblur 元素实现失去焦点时候触发的事件 onreset 表单重置时触发的事件 onsubmit 表单向后端提交数据时候触发的事件 oninput 事件和 onchange 事件的区别
oninput 事件,当我们的表单实现输入内容的时候,才实现触发,过程
onchange 事件,当我们的表单失去焦点的时候触发的事件,最终结果
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <form action="" method="POST"> <input type="text"> <button type="submit">搜索</button> <button type="reset" class="reset">重置</button> </form> <script> var formEl = document.querySelector('form'); var inputEl = document.querySelector("input") // 获取焦点和失去焦点 inputEl.addEventListener('focus', function (e) { console.log('focus 获取焦点'); }) inputEl.addEventListener('blur', function (e) { console.log('blur 表单失去焦点'); }) inputEl.addEventListener('input', function (e) { console.log('input 正在输入内容'); }) inputEl.addEventListener('change', function (e) { console.log('change 输入的内容正在发生变化'); }) formEl.addEventListener('reset', function (e) { alert("'reset 表单重置'") console.log('reset 表单重置'); }) formEl.addEventListener('submit', function (e) { console.log('submit 表单提交数据'); alert('submit 表单提交数据') }) // 注意我们的表单的提交默认是我们的 get 请求,这个时候,页面会全部瞬时刷新,后面我们就是使用的是我们的 ajax // 来实现提交我们的前端数据给后端的了 </script> </body> </html>
DOM 文档加载事件
我们的文档加载事件就是我们的文档实现加载的时候,我们的 script 标签的实现在我们的布局元素之前实现了书写
就是实现使用的是我们的 window.oncload = foo
这个时候就可以实现监听我们的文档的加载
DOMcontentloaded 就是实现的是我们的网页的内容实现加载完的触发的事件
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> // windwo.addEventListener("load", function (){ // // }) window.onload = function() { } </script> </body> </html><!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> // 这个事件的监听就是实现的是只是加载完了我们的mHTML,并且实现构建了我们的 DOM Tree // 但是我们的外部资源: 图片img, 外部样式CSS,这个时候就是实现的是我们的调用这个部分的加载事件 window.addEventListener("DOMContentLoaded", function(event) { console.log("HTML + DOM-Tree 加载完毕") }) // 就是实现的我们的加载完了我们完整的 HTML,同时还实现加载完了我们的外部资源: 图片img,外部样式CSS // 这个时候就是实现的是使用后我们的 load 文档加载事件了 window.addEventListener("load", function() { console.log("所有资源已经加载完毕") }) </script> </body> </html>