学会通过为DOM注册事件来实现可交互的网页特效。
学习会为 DOM 注册事件,实现简单可交互的网页特交。
事件是编程语言中的术语,它是用来描述程序的行为或状态的,一旦行为或状态发生改变,便立即调用一个函数。
例如:用户使用【鼠标点击】网页中的一个按钮、用户使用【鼠标拖拽】网页中的一张图片
结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。
addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和【事件回调】。
x12<html lang="en">3<head>4 <meta charset="UTF-8">5 <meta name="viewport" content="width=device-width, initial-scale=1.0">6 <title>事件监听</title>7</head>8<body>9 <h3>事件监听</h3>10 <p id="text">为 DOM 元素添加事件监听,等待事件发生,便立即执行一个函数。</p>11 <button id="btn">点击改变文字颜色</button>12 <script>13 // 1. 获取 button 对应的 DOM 对象14 const btn = document.querySelector('#btn')1516 // 2. 添加事件监听17 btn.addEventListener('click', function () {18 console.log('等待事件被触发...')19 // 改变 p 标签的文字颜色20 let text = document.getElementById('text')21 text.style.color = 'red'22 })2324 // 3. 只要用户点击了按钮,事件便触发了!!!25 </script>26</body>27</html>完成事件监听分成3个步骤:
addEventListener 方法为 DOM 节点添加事件监听click 事件类型大白话描述:所谓的事件无非就是找个机会(事件触发)调用一个函数(回调函数)。
click 译成中文是【点击】的意思,它的含义是监听(等着)用户鼠标的单击操作,除了【单击】还有【双击】dblclick
xxxxxxxxxx111<script>2 // 双击事件类型3 btn.addEventListener('dblclick', function () {4 console.log('等待事件被触发...');5 // 改变 p 标签的文字颜色6 const text = document.querySelector('.text')7 text.style.color = 'red'8 })910 // 只要用户双击击了按钮,事件便触发了!!!11</script>结论:【事件类型】决定了事件被触发的方式,如 click 代表鼠标单击,dblclick 代表鼠标双击。
addEventListener 的第2个参数是函数,这个函数会在事件被触发时立即被调用,在这个函数中可以编写任意逻辑的代码,如改变 DOM 文本颜色、文本内容等。
xxxxxxxxxx121<script>2 // 双击事件类型3 btn.addEventListener('dblclick', function () {4 console.log('等待事件被触发...')5 6 const text = document.querySelector('.text')7 // 改变 p 标签的文字颜色8 text.style.color = 'red'9 // 改变 p 标签的文本内容10 text.style.fontSize = '20px'11 })12</script>结论:【事件处理程序】决定了事件触发后应该执行的逻辑。
将众多的事件类型分类可分为:鼠标事件、键盘事件、表单事件、焦点事件等,我们逐一展开学习。
鼠标事件是指跟鼠标操作相关的事件,如单击、双击、移动等。
xxxxxxxxxx181<body>2 <h3>鼠标事件</h3>3 <p>监听与鼠标相关的操作</p>4 <hr>5 <div class="box"></div>6 <script>7 // 需要事件监听的 DOM 元素8 const box = document.querySelector('.box');910 // 监听鼠标是移入当前 DOM 元素11 box.addEventListener('mouseenter', function () {12 // 修改文本内容13 this.innerText = '鼠标移入了...';14 // 修改光标的风格15 this.style.cursor = 'move';16 })17 </script>18</body>xxxxxxxxxx161<body>2 <h3>鼠标事件</h3>3 <p>监听与鼠标相关的操作</p>4 <hr>5 <div class="box"></div>6 <script>7 // 需要事件监听的 DOM 元素8 const box = document.querySelector('.box');910 // 监听鼠标是移出当前 DOM 元素11 box.addEventListener('mouseleave', function () {12 // 修改文本内容13 this.innerText = '鼠标移出了...';14 })15 </script>16</body>keydown 键盘按下触发keyup 键盘抬起触发
focus 获得焦点
blur 失去焦点
input
任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。
xxxxxxxxxx181<body>2 <h3>事件对象</h3>3 <p>任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。</p>4 <hr>5 <div class="box"></div>6 <script>7 // 获取 .box 元素8 const box = document.querySelector('.box')910 // 添加事件监听11 box.addEventListener('click', function (e) {12 console.log('任意事件类型被触发后,相关信息会以对象形式被记录下来...');1314 // 事件回调函数的第1个参数即所谓的事件对象15 console.log(e)16 })17 </script>18</body>事件回调函数的【第1个参数】即所谓的事件对象,通常习惯性的将这个对数命名为 event、ev 、ev 。
接下来简单看一下事件对象中包含了哪些有用的信息:
ev.type 当前事件的类型ev.clientX/Y 光标相对浏览器窗口的位置ev.offsetX/Y 光标相于当前 DOM 元素的位置注:在事件回调函数内部通过 window.event 同样可以获取事件对象。
能够分析判断函数运行在不同环境中 this 所指代的对象。
环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境。
xxxxxxxxxx261<script>2 // 声明函数3 function sayHi() {4 // this 是一个变量5 console.log(this);6 }78 // 声明一个对象9 let user = {10 name: '张三',11 sayHi: sayHi // 此处把 sayHi 函数,赋值给 sayHi 属性12 }13 14 let person = {15 name: '李四',16 sayHi: sayHi17 }1819 // 直接调用20 sayHi() // window21 window.sayHi() // window2223 // 做为对象方法调用24 user.sayHi()// user25 person.sayHi()// person26</script>结论:
this 本质上是一个变量,数据类型为对象this 变量的值也不同this 就是谁】是判断 this 值的粗略规则window.sayHi() 所以 this 的值为 window如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数。
xxxxxxxxxx171<script>2 // 声明 foo 函数3 function foo(arg) {4 console.log(arg);5 }67 // 普通的值做为参数8 foo(10);9 foo('hello world!');10 foo(['html', 'css', 'javascript']);1112 function bar() {13 console.log('函数也能当参数...');14 }15 // 函数也可以做为参数!!!!16 foo(bar);17</script>函数 bar 做参数传给了 foo 函数,bar 就是所谓的回调函数了!!!
我们回顾一下间歇函数 setInterval
xxxxxxxxxx71<script>2 function fn() {3 console.log('我是回调函数...');4 }5 // 调用定时器6 setInterval(fn, 1000);7</script>fn 函数做为参数传给了 setInterval ,这便是回调函数的实际应用了,结合刚刚学习的函数表达式上述代码还有另一种更常见写法。
xxxxxxxxxx61<script>2 // 调用定时器,匿名函数做为参数3 setInterval(function () {4 console.log('我是回调函数...');5 }, 1000);6</script>结论: