Web APIs-2-事件基础

199 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第6天,点击查看活动详情

Web APIs - 第2天

学会通过为DOM注册事件来实现可交互的网页特效。

  • 能够判断函数运行的环境并确字 this 所指代的对象
  • 理解事件的作用,知道应用事件的 3 个步骤

事件

事件是编程语言中的术语,它是用来描述程序的行为或状态的,一旦行为或状态发生改变,便立即调用一个函数。

例如:用户使用【鼠标点击】网页中的一个按钮、用户使用【鼠标拖拽】网页中的一张图片

事件监听(绑定)

结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。

addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和【事件回调】。

语法:

元素对象.addEventListener( '事件类型' , 要执行的函数)

三要素

  1. 事件源(谁被触发)
  2. 事件类型(用什么方式触发,点击还是鼠标经过)
  3. 事件处理程序(要做什么事情)
<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>

完成事件监听分成3个步骤:

  1. 获取 DOM 元素
  2. 通过 addEventListener 方法为 DOM 节点添加事件监听
  3. 等待事件触发,如用户点击了某个按钮时便会触发 click 事件类型
  4. 事件触发后,相对应的回调函数会被执行

大白话描述:所谓的事件无非就是找个机会(事件触发)调用一个函数(回调函数)。

案例-京东点击关闭顶部广告

需求:点击关闭之后,顶部关闭 分析:

  1. 点击的是关闭按钮
  2. 关闭的是父盒子
  3. 利用样式的显示和隐藏完成, display:none 隐藏元素 display:block 显示元素

案例-随机点名

业务分析:

  1. 点击开始按钮随机抽取数组的一个数据,放到页面中
  2. 点击结束按钮删除数组当前抽取的一个数据
  3. 当抽取到最后一个数据的时候,两个按钮同时禁用(写点开始里面,只剩最后一个数据不用抽了 )
  4. 核心:利用定时器快速展示,停止定时器结束展示

事件类型

将众多的事件类型分类可分为:鼠标事件、键盘事件、表单事件、焦点事件等,我们逐一展开学习。

鼠标事件

鼠标事件是指跟鼠标操作相关的事件,如单击、双击、移动等。

  1. click鼠标点击
  2. mouseenter 监听鼠标是否移入 DOM 元素
  3. mouseleave 监听鼠标是否移出 DOM 元素
<body>
    <div></div>
    <script>
        const div = document.querySelector('div')

        // mouseenter 鼠标经过
        div.addEventListener('mouseenter',function(){
            console.log(`轻轻的我来了`)
        })
        // mouseleave 鼠标离开
        div.addEventListener('mouseleave',function(){
            console.log(`轻轻的我走了`)
        })
    </script>
</body>

案例-轮播图点击切换

需求:当点击左右的按钮,可以切换轮播图 分析:

  1. 右侧按钮点击,变量++,如果大于等于8,则复原0
  2. 左侧按钮点击,变量--,如果小于0,则复原最后一张
  3. 鼠标经过暂停定时器
  4. 鼠标离开开启定时器

焦点事件

表单获得光标

  1. focus 获得焦点
  2. blur 失去焦点
<body>
   <input type="text">
   <script>
       const input = document.querySelector('input')
       
       input.addEventListener('focus',function(){
           console.log('有焦点触发')
       })
       input.addEventListener('blur',function(){
           console.log('失去焦点触发')
       })
   </script>
</body>

案例-小米搜索框案例

需求:当表单得到焦点,显示下拉菜单,失去焦点隐藏下来菜单 分析:

  1. 开始下拉菜单要进行隐藏
  2. 表单获得焦点 focus,则显示下拉菜单,并且文本框变色(添加类)
  3. 表单失去焦点,反向操作

键盘事件

  1. keydown 键盘按下触发
  2. keyup 键盘抬起触发
<body>
   <input type="text">
   <script>
       const input = document.querySelector('input')
       
       input.addEventListener('focus',function(){
           console.log('有焦点触发')
       })
       input.addEventListener('blur',function(){
           console.log('失去焦点触发')
       })
   </script>
</body>

文本框输入事件

input:用户输入事件

案例-评论字数统计

需求:用户输入文字,可以计算用户输入的字数 分析:

  1. 判断用输入事件 input
  2. 不断取得文本框里面的字符长度, 文本域.value.length
  3. 把获得数字给下面文本框

事件对象

任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。

l. 事件对象是什么

  • 也是个对象,这个对象里有事件触发时的相关信息
  • 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息
  1. 使用场景
  • 可以判断用户按下哪个键,比如按下回车键可以发布新闻
  • 可以判断鼠标点击了哪个元素,从而做相应的操作

语法:

元素.addEventListener('click',function(e) {})\

事件回调函数的【第1个参数】即所谓的事件对象,通常习惯性的将这个对数命名为 eventevev

<body>
<input type="text">

  <script>
       const input = document.querySelector('input')
         input.addEventListener('keyup',function(e){
            // console.log(e.key)
            if(e.key === 'Enter'){
                console.log('我按下了回车键')
            }
        })
  </script>
</body>

接下来简单看一下事件对象中包含了哪些有用的信息:

  1. ev.type 当前事件的类型
  2. ev.clientX/Y 光标相对浏览器窗口的位置
  3. ev.offsetX/Y 光标相于当前 DOM 元素的位置

注:在事件回调函数内部通过 window.event 同样可以获取事件对象。

环境对象

能够分析判断函数运行在不同环境中 this 所指代的对象。

环境对象变量 this :它代表着当前函数运行时所处的环境。 作用:弄清this指向,可让我们代码更简洁 粗略规则:谁调用,this就是谁

回调函数

如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数。

间歇函数 setInterval

<script>
 function fn() {
    console.log('我是回调函数...');
  }
  // 调用定时器
  setInterval(fn, 1000);
</script>

fn 函数做为参数传给了 setInterval ,这便是回调函数的实际应用了,结合刚刚学习的函数表达式上述代码还有另一种更常见写法。

<script>
  // 调用定时器,匿名函数做为参数
  setInterval(function () {
    console.log('我是回调函数...');
  }, 1000);
</script>

结论:

  1. 回调函数本质还是函数,只不过把它当成参数使用
  2. 使用匿名函数做为回调函数比较常见

案例-Tab栏切换

需求:鼠标经过不同的选项卡,底部可以显示 不同的内容

  1. 主要核心是类的切换, 设定一个当前类,可以让当前元素高亮
  2. 鼠标经过当前选项卡,先移除其余元素身上的当前类,而只给当前元素添加类,
  3. 注意,当前类只能有一个