博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2021-06-08
阅读量:3957 次
发布时间:2019-05-24

本文共 3077 字,大约阅读时间需要 10 分钟。

事件介绍

事件是您在编程时系统内发生的动作或者发生的事情——系统会在事件出现时产生或触发某种信号,并且会提供一个自动加载某种动作(列如:运行一些代码)的机制,比如在一个机场,当跑道清理完成,飞机可以起飞时,飞行员会收到一个信号,因此他们开始起飞。

在这里插入图片描述

在 Web 中, 事件在浏览器窗口中被触发并且通常被绑定到窗口内部的特定部分 — 可能是一个元素、一系列元素、被加载到这个窗口的 HTML 代码或者是整个浏览器窗口。举几个可能发生的不同事件:

  1. 用户在某个元素上点击鼠标或悬停光标。
  2. 用户在键盘中按下某个按键。
  3. 用户调整浏览器的大小或者关闭浏览器窗口。
  4. 一个网页停止加载。
  5. 提交表单。
  6. 播放、暂停、关闭视频。
  7. 发生错误。

每个可用的事件都会有一个事件处理器,也就是事件触发时会运行的代码块。当我们定义了一个用来回应事件被激发的代码块的时候,我们说我们注册了一个事件处理器。注意事件处理器有时候被叫做事件监听器——从我们的用意来看这两个名字是相同的,尽管严格地来说这块代码既监听也处理事件。监听器留意事件是否发生,然后处理器就是对事件发生做出的回应。

注: 网络事件不是 JavaScript 语言的核心——它们被定义成内置于浏览器的 JavaScript APIs。

让我们看一个简单的例子。前面您已经见到过很多事件和事件监听器,现在我们概括一下以巩固我们的知识。在接下来的例子中,我们的页面中只有一个 button,按下时,背景会变成随机的一种颜色。

JavaScript代码如下所示:

const btn = document.querySelector('button');function random(number) {  return Math.floor(Math.random()*(number+1));}btn.onclick = function() {  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';  document.body.style.backgroundColor = rndCol;}

我们使用 btn 变量存储 button,并使用了Document.querySelector() 函数。我们也定义了一个返回随机数字的函数。代码第三部分就是事件处理器。btn变量指向 button 元素,在 button 这种对象上可触发一系列的事件,因此也就可以使用事件处理器。我们通过将一个匿名函数(这个赋值函数包括生成随机色并赋值给背景色的代码)赋值给“点击”事件处理器参数,监听“点击”这个事件。

只要点击事件在元素上触发,该段代码就会被执行。即每当用户点击它时,都会运行此段代码。

使用网页事件的方式

您可以通过多种不同的方法将事件侦听器代码添加到网页,以便在关联的事件被触发时运行它。在本节中,我们将回顾不同的机制,并讨论应该使用哪些机制。

事件处理器属性

这些是我们的课程中最常见到的代码 - 存在于事件处理程序过程的属性中。回到上面的例子:

const btn = document.querySelector('button');btn.onclick = function() {  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';  document.body.style.backgroundColor = rndCol;}

这个 onclick 是被用在这个情景下的事件处理器的属性,它就像 button 其他的属性(如 btn.textContent, or btn.style), 但是有一个特别的地方——当您将一些代码赋值给它的时候,只要事件触发代码就会运行。

您也可以将一个有名字的函数赋值给事件处理参数(正如我们在 Build your own function 中看到的),下面的代码也是这样工作的:

const btn = document.querySelector('button');function bgChange() {  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';  document.body.style.backgroundColor = rndCol;}btn.onclick = bgChange;

addEventListener() 和removeEventListener()

const btn = document.querySelector('button');function bgChange() {  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';  document.body.style.backgroundColor = rndCol;}btn.addEventListener('click', bgChange);

在addEventListener() 函数中, 我们具体化了两个参数——我们想要将处理器应用上去的事件名称,和包含我们用来回应事件的函数的代码。注意将这些代码全部放到一个匿名函数中是可行的:

btn.addEventListener('click', function() {
var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')'; document.body.style.backgroundColor = rndCol;});

这个机制带来了一些相较于旧方式的优点。有一个相对应的方法,removeEventListener(),这个方法移除事件监听器。例如,下面的代码将会移除上个代码块中的事件监听器:

btn.removeEventListener('click', bgChange);

在这个简单的、小型的项目中可能不是很有用,但是在大型的、复杂的项目中就非常有用了,可以非常高效地清除不用的事件处理器,另外在其他的一些场景中也非常有效——比如您需要在不同环境下运行不同的事件处理器,您只需要恰当地删除或者添加事件处理器即可。

您也可以给同一个监听器注册多个处理器,下面这种方式不能实现这一点:

myElement.onclick = functionA;myElement.onclick = functionB;

第二行会覆盖第一行,但是下面这种方式就会正常工作了:

myElement.addEventListener('click', functionA);myElement.addEventListener('click', functionB);

当元素被点击时两个函数都会工作:

此外,该事件机制还提供了许多其他强大的特性和选项。这对于本文来说有点超出范围,但是如果您想要阅读它们,请查看addEventListener()和removeEventListener()参考页面。

转载地址:http://ghxzi.baihongyu.com/

你可能感兴趣的文章
python 3里没有cmp这个函数了
查看>>
回文题
查看>>
二叉树的最短根到叶路径中点的个数
查看>>
给定二叉树求最小深度
查看>>
平衡树
查看>>
栈的应用题(1)
查看>>
判断链表是否有环
查看>>
从有序链表中去掉重复的
查看>>
后台程序结果重定向到文件,结果看不到文件?缓冲区的问题
查看>>
[LeetCode]Reverse Integer
查看>>
DNS采用的传输层协议可能是TCP或UDP
查看>>
Python SocketAPI
查看>>
众包完成的 Nature 大作:世界上作者最多的文章
查看>>
常用URL标注数据集网络下载
查看>>
adaboostM2初探(记录一个例子)
查看>>
Python使用heapq实现小顶堆(TopK大)、大顶堆(BtmK小)
查看>>
用python的matplotlib包绘制热度图
查看>>
matplot pip安装
查看>>
序列S的所有可能情况
查看>>
在Linux上用pip安装scipy
查看>>