JS Web APIs(二) DOM事件

77 阅读3分钟

移动端工程师学习javascrip的笔记和归纳,内容非常基础。

事件

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

事件监听

元素对象.addEventListener('时间名称', function () {
    // to do
}

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

事件类型

image.png

事件对象

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


<body>

  <h3>事件对象</h3>

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

  <hr>

  <div class="box"></div>

  <script>

    // 获取 .box 元素
    const box = document.querySelector('.box')
    // 添加事件监听
    box.addEventListener('click', function (e) {
      console.log('任意事件类型被触发后,相关信息会以对象形式被记录下来...');
      // 事件回调函数的第1个参数即所谓的事件对象
      console.log(e)
    })

  </script>
</body>

事件回调函数的【第1个参数】即事件对象,通常将这个对数命名为 eventeve

部分常用事件对象属性:

  1. ev.type 当前事件的类型
  2. ev.clientX/Y 光标相对浏览器窗口左上角的位置
  3. ev.offsetX/Y 光标相于当前 DOM 元素左上角的位置
  4. key 用户按下的键盘键的值(现在不提倡使用keycode)

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

环境对象

环境对象:指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境。

作用:弄清this的指向,可以让我们代码更简洁


<script>

  // 声明函数
  function sayHi() {
    // this 是一个变量
    console.log(this);
  }

  // 声明一个对象
  let user = {
    name: '张三',
    sayHi: sayHi // 此处把 sayHi 函数,赋值给 sayHi 属性
  }
  
  let person = {
    name: '李四',
    sayHi: sayHi
  }

  // 直接调用
  sayHi() // window
  window.sayHi() // window

  // 做为对象方法调用
  user.sayHi()// user
  person.sayHi()// person

</script>

结论:

  1. this 本质上是一个变量,数据类型为对象
  2. 函数的调用方式不同 this 变量的值也不同
  3. 【谁调用 this 就是谁】是判断 this 值的粗略规则
  4. 函数直接调用时this 的值为 window

回调函数

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

<script>

  // 声明 foo 函数
  function foo(arg) {
    console.log(arg);
  }

  // 普通的值做为参数
  foo(10);
  foo('hello world!');
  foo(['html', 'css', 'javascript']);

  function bar() {
    console.log('函数也能当参数...');
  }

  // 函数也可以做为参数!!!!
  foo(bar);

</script>

函数 bar 做参数传给了 foo 函数,bar 就是所谓的回调函数了!!!

我们回顾一下间歇函数 setInterval 

<script>

function fn() {
    console.log('我是回调函数...');
  }

  // 调用定时器
  setInterval(fn, 1000);
</script>

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

<script>

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

</script>

结论:

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

参考资料