javascript事件模型介绍

JavaScript事件模型介绍

JavaScript事件模型是一种基于浏览器内部事件循环机制的编程模型。通过事件模型,我们可以定义当某个特定事件发生时,需要执行的 JavaScript 代码。事件模型是一种异步编程的方式,它能够帮助我们编写更高效、更灵活、更交互性强的网页应用。

事件模型基本原理

事件模型基于一个事件监听器的机制,用于监视一个特定的事件是否发生。例如,我们可以监视一个按钮的 click 事件,然后在事件发生时执行指定的 JavaScript 方法。

事件监听器的代码如下:

// 监听按钮的 click 事件
document.getElementById("myButton").addEventListener("click", function(event) {
  // 执行指定的 JavaScript 方法
  console.log("按钮被点击了");
});

事件监听器的 addEventListener() 方法的参数表达了我们希望监听哪个事件、以及事件发生时需要执行哪个方法。在实际编写代码时,我们可以用各种事件类型(如 clickkeydown 等)以及各种方法(如匿名函数、具名函数等)来实现不同的事件监听。

事件冒泡机制

事件模型的另一个重要概念是事件冒泡机制(Event Bubbling)。事件冒泡指的是,当一个事件发生时,它会先被最具体的元素调用,然后逐级向上传播到更一般的元素(即事件目标的祖先元素),直到到达 document 对象。例如,当我们点击一个按钮时,事件的处理过程如下:

  1. 点击按钮;
  2. 按钮通知 web 浏览器事件发生,web 浏览器向上发送事件;
  3. 页面中的元素通过事件监听器获取事件;
  4. 如果有事件监听器在监听这个事件,就执行这些事件监听器。

在上面的这个过程中,我们可以在任何一个地方捕捉这个事件,并在相应的位置进行事件处理。根据不同需求,可以在事件的冒泡阶段中的某个级别捕获事件并阻止它的继续传播。该过程的代码可参考下面的示例:

// 监听父元素的 click 事件
document.getElementById("myDiv").addEventListener("click", function(event) {
  // 阻止事件继续向父元素传播
  event.stopPropagation();
  console.log("父元素被点击了");
});

// 监听子元素的 click 事件
document.getElementById("myButton").addEventListener("click", function(event) {
  console.log("子元素被点击了");
});

在上述代码中,当单击子元素按钮时,事件会逐级向上传播,先触发子元素的事件处理程序,然后向上传播到父元素。由于父元素的事件处理程序中调用了 event.stopPropagation() 来阻止事件继续传播,因此子元素的点击事件不会继续传播到父元素。

事件模型应用示例

下面是两个事件模型应用示例:

示例一:鼠标移动动画

我们可以编写以下代码,实现鼠标移过一个元素时,该元素的背景色会不断地从 redblue 之间变化:

<div id="myDiv" style="background-color:red; width:100px; height:100px;"></div>
// 监听元素的 mousemove 事件
document.getElementById("myDiv").addEventListener("mousemove", function(event) {
  // 获取元素背景色的当前值
  var bgColor = this.style.backgroundColor;

  // 获取背景色的红、绿、蓝三个通道的值
  var rgbArray = bgColor.match(/\d+/g);

  // 计算背景色的新颜色值(在红、绿、蓝三个通道上加上一定的数值)
  rgbArray[0] = +rgbArray[0] + 10;
  if (rgbArray[0] >= 255) rgbArray[0] = 0;
  rgbArray[1] = +rgbArray[1] - 10;
  if (rgbArray[1] <= 0) rgbArray[1] = 255;
  rgbArray[2] = +rgbArray[2] + 5;
  if (rgbArray[2] >= 255) rgbArray[2] = 0;

  // 更新元素的背景色
  this.style.backgroundColor = "rgb(" + rgbArray.join(",") + ")";
});

在上述代码中,我们使用 mousemove 事件监听器来动态更新元素的背景色。当鼠标移动到该元素上时,事件处理程序会被执行,然后计算出新的背景色,并更新元素的背景色属性。

示例二:阻止表单提交

我们可以编写以下代码,实现阻止用户在提交表单时意外地关闭了窗口:

<form id="myForm" onsubmit="return false;">
  <input type="text" name="username">
  <input type="password" name="password">
  <button type="submit">登录</button>
</form>
// 监听表单的 submit 事件
document.getElementById("myForm").addEventListener("submit", function(event) {
  // 阻止表单的默认提交行为
  event.preventDefault();

  // 校验表单输入项的合法性
  var username = this.elements["username"];
  var password = this.elements["password"];
  if (username.value == "" || password.value == "") {
    alert("请输入用户名和密码");
  } else {
    // 提交表单
    this.submit();
  }
});

在上述代码中,我们使用 submit 事件监听器来处理用户提交表单时的行为。当用户点击表单中的提交按钮时,事件处理程序会被执行,然后判断表单中的用户名和密码输入是否为空。如果有为空的情况,就弹窗提示用户输入合法的用户名和密码;否则,就正常地提交表单。此外,由于我们使用了 event.preventDefault() 方法来阻止了默认的提交行为,因此该页面也不会因为用户误操作而被无意中关闭。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript事件模型介绍 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 一文掌握JavaScript数组常用工具函数总结

    一文掌握JavaScript数组常用工具函数总结 前言 JavaScript 是一种非常受欢迎的脚本语言,而数组是 JavaScript 中最常用的数据结构之一。在实际开发中,我们通常使用数组来存储和处理数据。本文将介绍一些常用的 JavaScript 数组工具函数,包括以下内容: 遍历数组 操作数组 搜索数组 遍历数组 forEach() forEach(…

    JavaScript 2023年5月27日
    00
  • 图解JavaScript作用域链底层原理

    下面就为大家讲解一下“图解JavaScript作用域链底层原理”的完整攻略。 什么是作用域链? 作用域链指的是在 JavaScript 中,用于查找变量的一种机制。在 JavaScript 中,每个函数都有一个作用域链,它是由多个执行上下文(Execution Context)(如全局上下文、函数上下文等)的变量环境引用组成的链式结构。在查找变量时,Java…

    JavaScript 2023年6月10日
    00
  • window.open打开页面居中显示的示例代码

    下面是关于如何使用JavaScript代码在浏览器中打开一个新页面并使其居中显示的攻略。 1. 创建一个新页面 首先,我们需要使用 window.open() 方法创建一个新的浏览器窗口,并且通过 document.write() 方法向其写入一些内容,例如: <script type="text/javascript"> v…

    JavaScript 2023年6月11日
    00
  • Vue 项目迁移 React 路由部分经验分享

    下面详细讲解“Vue 项目迁移 React 路由部分经验分享”的完整攻略。 背景 在项目开发中,React 和 Vue 是两个非常常用的框架,在实际开发中,可能需要将一个 Vue 项目迁移到 React 项目中,其中涉及到路由部分,如何进行迁移呢?下面给出一些经验分享。 步骤 确定 React 项目结构 建议先熟悉一下 React 项目的结构,确定 Reac…

    JavaScript 2023年6月11日
    00
  • 原生JS写Ajax的请求函数功能

    这里将详细讲解如何使用原生JS编写Ajax请求函数,具体过程包括:创建XMLHttpRequest对象、设置请求方式、设置请求体、发送请求、获取响应数据,下面我们一步一步来看。 创建XMLHttpRequest对象 在使用Ajax向服务器发送请求之前,需要创建一个XMLHttpRequest对象,它是浏览器提供的用于在后台与服务器进行通信的对象。创建方式如下…

    JavaScript 2023年6月11日
    00
  • 关于JavaScript中事件绑定的方法总结

    针对关于JavaScript中事件绑定的方法总结,我将提供如下完整攻略: 一、什么是事件绑定 在JavaScript中,事件绑定是指将一个特定的JavaScript函数与某个HTML元素的特定事件联系起来的过程。当该事件在该元素上触发时,相应的JavaScript函数将被调用。事件绑定常用于网页交互中,比如点击按钮、拖拽事件等。 二、如何进行事件绑定 常用的…

    JavaScript 2023年6月11日
    00
  • Javascript Math pow() 方法

    JavaScript中的Math.pow()方法是用于计算一个数的指定次幂的函数。以下是关于Math.pow()方法的完整攻略,包含两个示例。 JavaScript Math对象的pow方法 JavaScript Math的pow()方法用于计算一个数的指定次幂。下面是pow()方法的语法: Math.pow(base, exponent) 其中,base表…

    JavaScript 2023年5月11日
    00
  • javascript常用方法汇总

    JavaScript 常用方法汇总 本文将介绍常用的 JavaScript 方法,包括字符串方法、数组方法、数学计算方法、日期时间处理方法等,希望对您有所帮助。 字符串方法 1. substring() substring() 方法将返回一个字符串的子串。该字符串是从指定的开始下标位置开始,直到出现指定的结束下标位置的前一个字符为止。 const str =…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部