web前端学习(四十一)——JavaScript DOM EventListener(添加与移除监听事件)

简介: web前端学习(四十一)——JavaScript DOM EventListener(添加与移除监听事件)

1.添加监听事件(addEventListener() 方法)


addEventListener() 方法用于向指定元素添加事件句柄。addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。

你可以向一个元素添加多个事件句柄,也可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件,也可以向任何 DOM 对象添加事件监听,不仅仅是HTML 元素。如: window 对象。

addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。

当你使用 addEventListener() 方法时, JavaScript HTML 标记中分离开来,可读性更强,在没有控制HTML标记时也可以添加事件监听。

其语法如下:👇👇👇

element.addEventListener(event, function, useCapture);

第一个参数是事件的类型 ( "click" "mousedown")。(注意:不要使用"on" 前缀。例如,使用 "click" ,而不是使用 "onclick"。)

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。


1.1 向原元素添加监听事件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>JS简单学习</title>
  </head>
  <body>
    <p>该实例使用 addEventListener() 方法在用户点击按钮时执行函数。</p>
    <button type="button" id="myBtn">点我</button>
    <script>
      document.getElementById("myBtn").addEventListener("click",myFunction);
      function myFunction() {
        alert("Hello World!!!");
      }
    </script>
  </body>
</html>

1.2 向同一个元素中添加多个相同类型的监听事件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>JS简单学习</title>
  </head>
  <body>
    <p>该实例使用 addEventListener() 方法向同个按钮中添加两个点击事件。</p>
    <button type="button" id="myBtn">点我</button>
    <script type="text/javascript">
      var x=document.getElementById("myBtn");
      x.addEventListener("click",myFunction);
      x.addEventListener("click",someOtherFunction);
      function myFunction() {
        alert("Hello World!!!");
      }
      function someOtherFunction() {
        alert("函数已执行!!!");
      }
    </script>
  </body>
</html>


1.3 向同一个元素中添加多个不同类型的监听事件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>该实例使用 addEventListener() 方法在同一个按钮中添加多个不同类型的事件。</p>
    <button type="button" id="myBtn">点我</button>
    <p id="demo"></p>
    <script type="text/javascript">
      var x=document.getElementById("myBtn");
      x.addEventListener("mouseover",myFirstFunction);
      x.addEventListener("click",mySecondFunction);
      x.addEventListener("mouseout",myThirdFunction);
      function myFirstFunction() {
        document.getElementById("demo").innerHTML +="此时鼠标移动到了按钮上" + "<br />";
      }
      function mySecondFunction() {
        document.getElementById("demo").innerHTML +="此时鼠标点击了按钮" + "<br />";
      }
      function myThirdFunction() {
        document.getElementById("demo").innerHTML +="此时鼠标移走了" + "<br />";
      }
    </script>
  </body>
</html>

1.4 Window对象添加监听事件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>该实例在 window 对象中使用 addEventListener() 方法。</p>
    <p>尝试重置浏览器的窗口触发 "resize" 事件句柄。</p>
    <p id="demo"></p>
    <script type="text/javascript">
      window.addEventListener("resize",function(){
        document.getElementById("demo").innerHTML=Math.random();
      });
    </script>
  </body>
</html>

1.5 带有参数的监听事件

当传递参数值时,使用"匿名函数"调用带参数的函数。 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>该实例演示了在使用 addEventListener() 方法时如何传递参数。</p>
    <p>点击按钮执行计算。</p>
    <button type="button" id="myBtn">点我</button>
    <p id="demo"></p>
    <script type="text/javascript">
      var x=5,y=6;
      document.getElementById("myBtn").addEventListener("click",function(){
        myFunction(x,y);
      });
      function myFunction(a,b) {
        var ans=a*b;
        document.getElementById("demo").innerHTML=ans;
      }
    </script>
  </body>
</html>

1.6 监听事件中的事件冒泡和事件捕获

事件传递有两种方式:冒泡与捕获。事件传递定义了元素事件触发的顺序。如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的"click" 事件先被触发呢?

 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发,然后再触发<p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener(event, function, useCapture);


默认值为 false, 即冒泡传递。当值为 true ,事件使用捕获传递。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
    <style type="text/css">
      div {
        border: 1px solid black;
        padding: 40px;
        background-color: aqua;
      }
    </style>
  </head>
  <body>
    <p>该实例演示了在添加不同事件监听时,冒泡与捕获的不同。</p>
    <div id="myDiv1">
      <p id="myP1">点击段落,我是冒泡。</p>
    </div><br />
    <div id="myDiv2">
      <p id="myP2">点击段落,我是捕获。</p>
    </div>
    <script type="text/javascript">
      document.getElementById("myP1").addEventListener("click",function() {
        alert("你点击了P1元素!!!");
      },false);
      document.getElementById("myDiv1").addEventListener("click",function() {
        alert("你点击了DIV1元素!!!");
      },false);
      document.getElementById("myP2").addEventListener("click",function() {
        alert("你点击了P2元素!!!");
      },true);
      document.getElementById("myDiv2").addEventListener("click",function() {
        alert("你点击了DIV2元素!!!");
      },true);
    </script>
  </body>
</html>


2.移除监听事件(removeEventListener()方法)


removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄。 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
    <style type="text/css">
      #myDIV {
        border: 1px solid black;
        padding: 50px;
        background-color: burlywood;
        color: blue;
      }
    </style>
  </head>
  <body>
    <div id="myDIV"> div 元素添加了 onmousemove 事件句柄,鼠标在框内移动时会显示随机数。
      <p>点击按钮移除 DIV 的事件句柄。</p>
      <button type="button" onclick="removeHandler()" id="myBtn">点我</button>
    </div>
    <p id="demo"></p>
    <script type="text/javascript">
      document.getElementById("myDIV").addEventListener("mousemove",myFunction);
      function myFunction() {
        document.getElementById("demo").innerHTML=Math.random();
      }
      function removeHandler() {
        document.getElementById("myDIV").removeEventListener("mousemove",myFunction);
      }
    </script>
  </body>
</html>

 

相关文章
|
2月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
1月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
180 0
|
1月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
141 0
|
2月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
2月前
|
JavaScript 前端开发 开发者
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
6月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
2月前
|
JavaScript 前端开发 物联网
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
7月前
|
JavaScript 前端开发 API
|
5月前
|
JSON JavaScript 前端开发
JavaScript入门干货:蓝桥杯Web组分章学习笔记(基于蓝桥云课《JavaScript基础入门》)
这是一份详尽的JavaScript学习笔记,涵盖基础到进阶内容。包括变量、运算符、数组、字符串操作,DOM/BOM事件处理,内置对象(如Array、Date、Math)用法,JSON格式解析,以及函数作用域与闭包等核心概念。同时深入探讨值类型和引用类型的差异、异常处理机制,并介绍函数高级特性如call/apply/bind方法、递归及arguments对象。代码按章节分点整理,注释细致,适合初学者系统掌握JavaScript编程知识。
114 2
|
8月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
7442 23

热门文章

最新文章

下一篇
oss云网关配置