JavaScript中的事件监听

文章目录

  • 事件监听
    • 事件类型
      • 鼠标触发类型案例——轮播图
      • 表单获得光标类型类型案例——点击搜索框获得下拉表单
      • 键盘触发类型效果展示
      • 表单输入触发类型案例——统计表单字符数量
    • 事件对象
      • 常用属性
      • 环境对象
      • 回调函数


事件监听

事件:在编程时系统内发生的动作,比如用户在网页上单击一个按钮。

事件监听:让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也被称为绑定事件或注册事件。比如鼠标经过时显示下拉菜单,比如点击可以播放轮播图等。

语法:元素对象.addEventListener('事件类型', 要执行的函数)

事件监听三要素:

  • 事件源:被触发的元素
  • 事件类型:用什么方式触发,比如鼠标单击click、鼠标经过mouseover等
  • 事件调用的函数:要做什么事
const but = document.querySelector('button')
but.addEventListener('click', function () {alert('welcome')
})

on方式div.onclick = function(){}同样可以实现事件监听,但会被覆盖,addEventListener方式可以绑定多次。

事件类型

  • 鼠标触发
    • click:鼠标点击
    • mouseenter:鼠标经过
    • mouseleave:鼠标离开
  • 表单获得光标
    • focus:获得焦点
    • blur:失去焦点
  • 键盘触发
    • Keydown:键盘按下触发
    • Keyup:键盘抬起触发
  • 表单输入触发
    • input:用户输入事件

鼠标触发类型案例——轮播图

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.con div {width: 200px;height: 200px;background-size: 200px 200px;}ul {list-style: none;}li {width: 5px;height: 5px;border-radius: 50%;background-color: blue;float: left;margin: 0 5px;vertical-align: middle;}ul {display: flex;align-items: center;}.active {width: 8px;height: 8px;}</style>
</head><body><div class="con"><div></div><ul><li class="active"></li><li></li><li></li><button class="last">last</button><button class="next">next</button></ul></div><script>const arr = ['url(../图片/微信图片_20231114204518.jpg)', 'url(../图片/微信图片_20231114204634.jpg)', 'url(../图片/微信图片_20231114204549.jpg)'] // 图片链接记得加url()let i = 0;const back = document.querySelector('.con div')back.style.backgroundImage = arr[i]let li = document.querySelector(`ul li:nth-child(${i + 1})`)function xyg() {li.classList.remove('active')i++if (i == 3) {i = 0}back.style.backgroundImage = arr[i]li = document.querySelector(`ul li:nth-child(${i + 1})`)li.classList.add('active')}let n = setInterval(xyg, 2000)const next = document.querySelector('.next')next.addEventListener('click', xyg)const last = document.querySelector('.last')last.addEventListener('click', function () {li.classList.remove('active')i--if (i == -1) {i = 2}back.style.backgroundImage = arr[i]li = document.querySelector(`ul li:nth-child(${i + 1})`)li.classList.add('active')})const con = document.querySelector('.con')con.addEventListener('mouseenter', function () {clearInterval(n)})con.addEventListener('mouseleave', function () {n = setInterval(xyg, 2000)})</script>
</body></html>

表单获得光标类型类型案例——点击搜索框获得下拉表单

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {position: relative;width: 200px;margin: 0 auto;}* {padding: 0;margin: 0;}ul {list-style: none;}.list {border: 1px solid #bbb;display: none;position: absolute;left: 0;top: 21px;}li {border-bottom: 1px solid #bbb;width: 80px;}</style>
</head><body><div class="box"><input type="text" name="" id=""><div class="list"><ul><li>1111</li><li>2222</li><li>3333</li><li>4444</li><li>5555</li></ul></div></div><script>const list = document.querySelector('.list')function fn() {list.style.display = 'block'}function kn() {list.style.display = 'none'}const inp = document.querySelector('input')inp.addEventListener('focus', fn)inp.addEventListener('blur', kn)</script>
</body></html>

键盘触发类型效果展示

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="text" name="" id=""><script>const inp = document.querySelector('input')inp.addEventListener('keydown', function () {console.log('按下键盘');})inp.addEventListener('keyup', function () {console.log('键盘弹起');})</script>
</body></html>

表单输入触发类型案例——统计表单字符数量

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.text {position: relative;width: 200px;height: 100px;margin: 100px auto;}textarea {width: 200px;height: 100px;resize: none;}.text div {position: absolute;color: #ccc;bottom: 0;right: 0;width: 50px;height: 20px;opacity: 0;font-size: 10px;}</style>
</head><body><div class="text"><textarea name="" id=""></textarea><div>0/300</div></div><script>const text = document.querySelector('textarea')const div = document.querySelector('.text div')text.addEventListener('focus', function () {div.style.opacity = 1div.innerHTML = `${text.value.length} / 300`})text.addEventListener('blur', function () {div.style.opacity = 0})text.addEventListener('input', function () {div.innerHTML = `${text.value.length} / 300`})</script>
</body></html>

事件对象

事件对象也是个对象,这个对象里有事件触发时的相关信息,例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息。

使用场景:

  • 可以判断用户按下哪个键,比如按下回车键可以发送消息
  • 可以判断鼠标点击了哪个元素,从而做出相应的操作

在事件绑定的回调函数的第一个参数就是事件对象:元素.addEventListener('click',function (e){}) // e是事件对象

常用属性

  • type:获取当前事件类型
  • clientX/clientY:获取光标相对于浏览器可见窗口左上角的位置
  • offsetX/offsetY:获取光标相对于当前DOM元素左上角的位置
  • key:用户按下键盘的值(现在不提倡使用keyCode)

环境对象

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

普通函数里this指向的是window。

回调函数

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

    function fn() {   // 这是一个回调函数list.style.display = 'block'}const inp = document.querySelector('input')inp.addEventListener('focus', fn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu bind9 主从配置

主配置 &#xff08;master&#xff09; # cat /etc/bind/named.conf.local zone "xxx.com" {type master;file "/var/lib/bind/xxx.com.hosts";also-notify {172.17.151.242; // 从IP};};# cat /var/lib/bind/xxx.com.hosts $ttl 3600 xxx.com. I…

多态的学习

1. &#x1f3f7;多态的概念 多态的概念&#xff1a; 通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会 产生出不同的状态。 举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票…

将Flutter程序打包为ios应用并进行安装使用

如果直接执行flutter build ios: Building com.example.myTimeApp for device (ios-release)...════════════════════════════════════════════════════════════════════════════════No vali…

Web自动化 - selenium

文章目录 一、selenium的使用selenium的安装 二、元素1. 定位选择元素1.id 定位2. class_name 定位find_element 和 find_elements的区别3. TAG_NAME 定位4. 超链接 定位 2. 操控元素1. 查询内容2. 获取元素文本内容3. 获取元素属性 3. 浏览器常用操作API4. 鼠标操作 - perform…

[力扣题解]134. 加油站

题目&#xff1a;134. 加油站 思路 贪心法&#xff1b; 代码 暴力法 class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int i, rest, index, size;size gas.size();for(i 0; i < size; i){// 从 i 开始//…

Python 全栈系列244 nginx upstream 负载均衡 踩坑日记

说明 最初是因为租用算力机(Python 全栈系列242 踩坑记录:租用算力机完成任务)&#xff0c;所以想着做一个负载均衡&#xff0c;然后多开一些服务&#xff0c;把配置写在nginx里面就好了。 一开始租用了一个3080起了一个服务&#xff0c;后来觉得速度不够快&#xff0c;再起了…

DOM 文档对象模型

一、DOM简介 1、什么是DOM DOM 文档对象模型简称&#xff0c;是W3C组织推荐的处理可扩展标记语言的标准编程接口 W3C已经定义了一系列的DOM接口&#xff0c;通过这些接口可以改变网页的内容、结构、样式 2、DOM树 DOM把以上内容都看做是对象 二、获取元素 获取页面元素&am…

day001 ~如何修改主机名

命令行方式设置主机名 # 这个很重要&#xff01;用命令改方便些 hostnamectl set-hostname ocloud-252 #查询&#xff0c;exit或logout重新登录后发现主机名换掉 hostname nmtui方式修改 nmtui 在工作中,如果机器很多,最好修改主机名做好标识不至于弄混,方便管理.

TensorFlow运行bug汇总

1、ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1 解决方案 pip install urllib31.26.15 -i https://pypi.tuna.tsinghua.edu.cn/simple 升级或者降级 (TF2.1) C:\Users\Administrator>pip install urllib31.26.15 -i https://pypi.tuna.tsinghua.edu.cn/sim…

LeetCode—用队列实现栈

一.题目 二.思路 1.后入先出的实现&#xff1a; 创建两个队列来实现栈&#xff08;后入先出&#xff09;&#xff1a; 两个队列&#xff0c;保持一个存数据&#xff0c;另一个为空&#xff0c;入数据&#xff08;push&#xff09;要入不为空的队列&#xff0c;&#xff08;p…

DDS块集是如何工作的?

DDS块集使你能够在Simulink中创建DDS应用程序。如果你有一个在Simulink中建模的应用程序&#xff0c;希望能够使用DDS&#xff0c;则可以使用DDS块集轻松连接到DDS中间件平台。 DDS块集将DDS概念引入Simulink环境&#xff0c;在Simulink应用程序中对这些概念进行建模&#xff0…

java实体类中,不对应数据库的实体类字段

TableField(exist false) 是 MyBatis Plus 中的注解&#xff0c;用于标记实体类中的字段是否映射到数据库表中的字段。在这个注解中&#xff0c;exist 属性默认为 true&#xff0c;表示该字段在数据库表中存在。而当设置为 false 时&#xff0c;表示该字段不会映射到数据库表中…

STM32串口通信入门

文章目录 一、串口协议和RS-232标准&#xff0c;以及RS232电平与TTL电平的区别1.串口通信协议2.RS-232标准3.RS232电平与TTL电平的区别4.USB/TTL转232“模块&#xff08;CH340芯片为例&#xff09; 二、补充实验&#xff08;一&#xff09;几个常见的库函数、结构体1.时钟配置函…

【机器学习数据可视化-04】Pyecharts数据可视化宝典

一、引言 在大数据和信息爆炸的时代&#xff0c;数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形&#xff0c;我们能够更好地理解数据&#xff0c;挖掘其背后的信息。Pyecharts&#xff0c;作为一款基于Python的数据可视化库&#xff0c;凭借其丰富的图表类型…

代码随想录刷题笔记

目录 四数相加2&#xff08;Leetcode454&#xff09; 四数相加2&#xff08;Leetcode454&#xff09; public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int cnt 0;Map<Integer,Integer> map new HashMap();/** 这一步用来存 数组1和数…

多模态EDA论文小记

论文地址 该论文主要改进点是&#xff1a;通过动态化局部搜索中每个集群大小&#xff0c;高斯和柯西分布共同产生个体。总的来说改进点不多&#xff0c;当然也可能是笔者还没发现。 局部搜索 划分集群 划分集群有两个策略分别是&#xff1a; 随机生成一个点作为中心点&…

MySQL表死锁查询语句

步骤1&#xff1a;查询表死锁的sql语句&#xff1a; SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ; 或 SELECT * FROM information_schema.INNODB_TRX; 步骤2&#xff1a;删除 kill "对应的线程id"

Dockerfile 基本结构

Dockerfile 是一个文本文件&#xff0c;用于自动化 Docker 镜像的构建过程。这里是一个简单的 Dockerfile 编写步骤&#xff0c;以及一个基本的例子&#xff1a; Dockerfile 基本结构 FROM: 指定基础镜像。RUN: 执行命令。COPY / ADD: 复制文件或目录到镜像中。CMD: 设置容器…

【JVM】Class文件的格式

目录 概述 Class文件的格式 概述 Class文件是JVM的输入&#xff0c;Java虚拟机规范中定义了Class文件的结构。Class文件是JVM实现平台无关、技术无关的基础。 1:Class文件是一组以8字节为单位的字节流&#xff0c;各个数据项目按顺序紧凑排列 2:对于占用空间大于8字节的数据…

16 华三数据中心最流行的技术 M-LAG

STP和MTP&#xff08;第二十二课&#xff09;-CSDN博客 VRRP技术和浮动路由(第二十六课)_vrrp 浮动路由-CSDN博客 VRRP DHCP ACL NAT 网络核心路由技术综述 (第十课)-CSDN博客 04 交换机的IRF的配置-CSDN博客 1 M-LAG AI介绍 M-LAG&#xff08;Multi-Chassis Link Aggrega…