事件监听 结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。
addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和【事件回调】。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>事件监听</title> </head> <body> <h3>事件监听</h3> <p id="text">为 DOM 元素添加事件监听,等待事件发生,便立即执行一个函数。</p> <button id="btn">点击改变文字颜色</button> <script> // 1. 获取 button 对应的 DOM 对象 const btn = document.querySelector('#btn') // 2. 添加事件监听 btn.addEventListener('click', function () { console.log('等待事件被触发...') // 改变 p 标签的文字颜色 let text = document.getElementById('text') text.style.color = 'red' }) // 3. 只要用户点击了按钮,事件便触发了!!! </script> </body> </html>
完成事件监听分成3个步骤:
获取 DOM 元素
通过 addEventListener 方法为 DOM 节点添加事件监听
等待事件触发,如用户点击了某个按钮时便会触发 click 事件类型
事件触发后,相对应的回调函数会被执行
大白话描述:所谓的事件无非就是找个机会(事件触发)调用一个函数(回调函数)。
事件类型 将众多的事件类型分类可分为:鼠标事件、键盘事件、表单事件、焦点事件等,我们逐一展开学习。
鼠标事件 鼠标事件是指跟鼠标操作相关的事件,如单击、双击、移动等。
`mouseenter 监听鼠标是否移入 DOM 元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <body> <h3 > 鼠标事件</h3 > <p > 监听与鼠标相关的操作</p > <hr> <div class ="box" > </div > <script > const box = document .querySelector ('.box' ); box.addEventListener ('mouseenter' , function ( ) { this .innerText = '鼠标移入了...' ; this .style .cursor = 'move' ; }) </script > </body>
2.`mouseleave 监听鼠标是否移出 DOM 元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <body> <h3 > 鼠标事件</h3 > <p > 监听与鼠标相关的操作</p > <hr> <div class ="box" > </div > <script > const box = document .querySelector ('.box' ); box.addEventListener ('mouseleave' , function ( ) { this .innerText = '鼠标移出了...' ; }) </script > </body>
键盘事件 keydown 键盘按下触发keyup 键盘抬起触发
焦点事件 focus 获得焦点
blur 失去焦点
文本框输入事件 input
事件对象 任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <body> <h3 > 事件对象</h3 > <p > 任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。</p > <hr> <div class ="box" > </div > <script > const box = document .querySelector ('.box' ) box.addEventListener ('click' , function (e ) { console .log ('任意事件类型被触发后,相关信息会以对象形式被记录下来...' ); console .log (e) }) </script > </body>
事件回调函数的【第1个参数】即所谓的事件对象,通常习惯性的将这个对数命名为 event、ev 、ev 。
接下来简单看一下事件对象中包含了哪些有用的信息:
ev.type 当前事件的类型
ev.clientX/Y 光标相对浏览器窗口的位置
ev.offsetX/Y 光标相于当前 DOM 元素的位置
注:在事件回调函数内部通过 window.event 同样可以获取事件对象。
环境对象
能够分析判断函数运行在不同环境中 this 所指代的对象。
环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <script> function sayHi ( ) { console .log (this ); } let user = { name : '张三' , sayHi : sayHi } let person = { name : '李四' , sayHi : sayHi } sayHi () window .sayHi () user.sayHi () person.sayHi () </script>
结论:
this 本质上是一个变量,数据类型为对象
函数的调用方式不同 this 变量的值也不同
【谁调用 this 就是谁】是判断 this 值的粗略规则
函数直接调用时实际上 window.sayHi() 所以 this 的值为 window
回调函数 如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script> function foo (arg ) { console .log (arg); } foo (10 ); foo ('hello world!' ); foo (['html' , 'css' , 'javascript' ]); function bar ( ) { console .log ('函数也能当参数...' ); } foo (bar); </script>
结论:
回调函数本质还是函数,只不过把它当成参数使用
使用匿名函数做为回调函数比较常见