老大哥在看着你 - 事件与事件监听

在JS的世界里到处是物件,在浏览器的世界里到处是事件。

事件驱动

根据JavaScript大全,客户端JavaScript程序是使用非同步的事件驱动程序设计模型。
这种模型最大的特色是程序执行的流程是根据使用者的行为而定,这些行为可能是在键盘输入一串文字或是用滑鼠点击了页面某个元素,这些行为发生的当下就会产生一个事件。

而前端开发者要做的事就是针对关心的事件预先设计好相对应的流程。

题外话:除了事件驱动设计模型,维基百科还提到了其他两种设计模型:

  1. 批次程序设计:程序执行的流程是由程序设计师来决定
  2. 资料驱动程序设计:程序语句描述要匹配的资料,和对它需要做的处理,程序本身不定义选取资料的一序列档案操作步骤

常见事件类型

老大哥监听的事件类型包山包海,以下先条列常使用到的类型就好:

滑鼠事件

  • click: 滑鼠点击元素
  • mouseover: 滑鼠经过元素
  • mouseout: 滑鼠离开元素

键盘事件

  • keydown: 使用者按下某个键盘按键
  • keyup: 使用者放开某个键盘按键

表单事件

  • submit: 使用者提交表单
  • focus: 使用者点击某个输入框

事件监听方式

成为老大哥的第一步就是学会装监听器,主要有下面两种方法:
说明书上说,第二种方法比较新,推荐要成为监听强者的大哥们使用

假设我们要做出一个惊奇按钮,在使用者点击後,按钮的文字和颜色会改变,来看看两者的写法差异和优缺点

  • on-event: on 之後接着事件名称,例如:onclick, onmouseover, onload等等,必须全小写
const button = document.querySelector('button')

function changeContent() {button.textContent = 'Hey You';}
function changeColor() {button.style.backgroundColor = '#dd1104';}

button.onclick = changeContent;
button.onclick = changeColor;

实验结果发现,当有一个以上的处理器,後者会覆写之前注册的处理器,在这个例子中,按下按钮後只会改变颜色,但按钮中的文字不会改变。

这是因为这个方式当初在设计时,开发者认为事件目标最多只会有一个处理器。所以如果我们对於一个事件需要多个处理器时,就必须用下面的语法

  • addEventListener():

先来看看语法规则,addEventListener的括号中接受三个引数,依序是:

  1. 注册处理器的事件类型,必须是一个字串
  2. 事件发生时要触发的函式
  3. 布林值或物件
const button = document.querySelector('button')

function changeContent() {button.textContent = 'Hey You';}
function changeColor() {button.style.backgroundColor = '#dd1104';}

button.addEventListener('click', changeContent);
button.addEventListener('click', changeColor);

成功完成想要的效果~

为了成为让人闻之丧胆的老大哥,一起来好好练习addEventListener()吧!/images/emoticon/emoticon77.gif

参考资料:

JavaScript 大全
前端开发思维转变——从事件驱动到资料驱动
资料驱动编程
事件驱动程序设计


<<:  30天轻松学会unity自制游戏-简易介绍google play上架

>>:  Day20-"字串练习-3"

Day17. Dynamic Programming

看完今天的文章,自己试着在专案写动态写法後,读者们会发现今天讲的东西很实用。我们可以透过动态的写法,...

mostly:functional 第二十八章:Applicative 的实体

建筑跟外观一样散发着新颖的气息,而格局跟上一间也相当类似。而这次大厅中央放着两座雕塑,两个之间看起来...

如何取出物件中重复/不重复的值

在上一篇中写了关於阵列的做法 假如今天我们将阵列改成物件,该怎麽去实现它呢? 先给一个全域值: co...

[Day02] 第二章- 初探金流API文件-1

前言 今天会分享我的阅读api心得 并做简易的操作来使用今天研读後的成果 前几日会以阅读文件跟熟悉永...

Day17 Review周期(Issue Board)

专案运行过程,如何将进行方向维持着,不会像YAMAHA一样乱点技能树呢? 这就需要「时时勤拂拭,莫使...