[JS]DOM事件

news2024/11/18 6:01:25

事件监听

让程序检测是否有事件产生, 一旦事件触发, 就调用函数做出响应

事件三要素: 事件源(谁的事件) 事件类型(如何触发) 事件处理程序(做什么)

function fn() {}
// 绑定事件
btn.addEventListener('click', fnction() { })

// 绑定事件
btn.addEventListener('click', fn)

// 绑定事件(不推荐)
btn.addEventListener('click', 'fn()')

// 解绑事件
btn.removeEventListener('click',fn)
发展历史
  1. DOM L0
  • DOM发展的第一版
  • 事件绑定: 事件源.on事件 = function() { }
  • 事件解绑: 事件源.on事件 = null
  • 重复注册的事件会被覆盖
  • 仅支持事件冒泡
  1. DOM L1
  • 1998年10月1日成功W3C推荐标准
  1. DOM L2
  • 推荐使用事件柄的方式注册事件
  • 可以重复注册事件, 支持事件冒泡和捕获
  • 匿名函数无法解绑事件
  1. DOM L2
  • 增加了更多的事件类型

事件类型

鼠标事件

点击事件: click

双加击事件: dbclick

移入移出事件: hover //写两个函数,,逗号隔开,用来区分悬停和离开

鼠标经过/离开: mouseenter/mouseleave //不会冒泡(只自己触发)

鼠标经过/离开: mouseover/mouseout //会冒泡

鼠标移动: mousemove

鼠标弹起: mouseup

鼠标按下: mousedown

键盘事件

键盘弹起: keyup (不区分大小写)

键盘按下: keydown (不区分大小写)

键盘按下: keypress (不识别功能键///区分大小写)

表单事件

获取鼠标焦点: focus

失去鼠标焦点: blur

用户数输入: input

内容改变事件: change

事件对象

通过事件对象可以拿到事件触发时的相关信息

// 事件绑定的回调函数的第一个参数就是事件对象
元素.addEventListener('click', function(event){
   ... ...
})
  1. 事件对象只有有了事件才会存在,他是系统自动创建的,不需要我们传递参数
  2. 事件对象 是 我们事件一系列相关数据的集合,里面包含了很多属性和方法
  3. 这个事件对象我们可以自己命名,比如 event ,evt , e,

常用属性和方法:

  1. 返回触发事件的对象: e.target
  2. 返回触发的事件类型: e.type
  3. 阻止元素的默认行为
  • e.preventDefault(); // 阻止a标签跳转,阻止表单域跳转
  • return false; // 没有兼容性问题, 但是只限于传统注册方式, 且后面的代码不再执行;
  1. 阻止事件冒泡: e.stopPropagation();
  2. 禁用右键菜单: contextmenu (配合阻止默认行为使用);
  3. 禁止选中文字: selectstart (配合阻止默认行为使用);
  4. 获取鼠标在页面中的位置:
  • e.clientX; 鼠标在可视区域的X坐标值;
  • e.clientY; 鼠标在可视区域的Y坐标值;
  • e.pageX; 鼠标在文档页面的X坐标;
  • e.pageY; 鼠标在文档页面的Y坐标;
  1. 返回键盘的键值: e.key

环境对象

所有的函数内部都有一个特殊的变量this, 它代表着当前函数运行时所处的环境

函数的调用方式不同, this指代的对象也不同, 简单理解 [谁调用, this指向谁 ]

回调函数

把一个函数当做参数传递给另一个函数时, 这个函数就是回调函数

function fn() {  }
// fn就是回调函数
setInterval(fn, 1000)
  1. 5:事件委托: 不是每个子节点单独设置监听器,而是事件监听器设置在父节点上,然后影响冒泡原理影响子节点;
  2. 作用就是提高程序的性能,因为只操作一次DOM.

事件流

事件流就是事件完整执行的过程, 分为事件捕获阶段, 处于目标阶段, 事件冒泡阶段

事件捕获

从DOM的根元素开始执行事件(从大到小)

DOM.addEventListener(事件类型, 事件处理函数, 是否使用捕获机制)
  • 事件捕获很少使用, 所以默认参数是false, 代表事件在冒泡阶段触发
  • 若使用L0事件监听, 则只有冒泡阶段, 没有捕获
事件冒泡

当一个元素触发事件后, 会依次向上调用所有父级元素的同名事件

  1. 事件冒泡是默认存在的, 所以容易导致事件影响父级元素
  2. 如果需要把事件限制在当前元素生效, 就需要阻止事件冒泡
  3. 阻止事件冒泡需要拿到事件对象
  4. 事件对象.stopPropagation()
  5. 该方法可以阻断事件流动传播, 冒泡和捕获都会被阻止

事件委托

利用事件冒泡的特点, 把事件注册在父元素身上, 让子元素通过冒泡触发父元素的事件

  1. 好处: 减少事件注册, 提高程序性能
  2. 通过 事件对象.target.tagName 拿到真正触发事件的元素

其他事件

页面加载事件

有时候需要页面资源或者某些资源加载完毕后, 触发一些事件

// 页面加载完成
window.addEventListener('load', function(){ })

// 某个资源加载完成
img.addEventListener('load', function(){ })

// 页面DOM加载完成
// 速度更快
document.addEventListener('DOMContentLoaded', function(){ })
元素滚动事件

滚动条在滚动的时候持续触发的事件

// 页面滚动事件
window.addEventListener('scroll', function(){ })

// 元素滚动事件
div.addEventListener('load', function(){ })
  • 单纯的监听元素滚动, 不起什么作用, 通过要配合scroll相关的属性使用
页面尺寸事件

窗口尺寸改变的时候触发事件

window.addEventListener('resize',function(){
  // 检测屏幕宽度
  let w = document.documentElement.clientWidth
})

元素尺寸与位置

scroll家族

scroll翻译过来就是滚动的, 一般配合页面滚动使用, 用于获取元素被卷去的距离

  1. scrollTop 返回元素被卷去的上侧距离
  2. scrollLeft 返回元素被卷去的左侧距离
  3. scrollWidth 返回自身实际的宽度, 不含边框
  4. scrollHeight 返回自身实际的高度,不含边框
  5. scroll属性获取的数据都是可读写的, 返回值不带单位, 设置时也不用单位
  6. 设置页面滚动到指定位置 scrollTo(x, y)
window.addEventListener('scroll',function(){
  // 一般要写在页面滚动监听函数中
  const n = document.documentElement.scrollTop 
})

client属性

client是客户端的意思, 主要用于获取元素可视区的宽高

  1. clientTop 返回上边框的大小
  2. clientLeft 返回左边框的大小
  3. clientWidth 返回元素可视区的宽度
  4. clientHeight 返回元素可视区的高度
  5. 可视区就是只包含内容和padding, 不包含边框, margin, 滚动条
  6. client属性获取的数据不带单位, 只读属性
offset家族

offset翻译过来就是偏移量, 主要用来获取元素相对于父元素的位置 或者 元素的真实宽高

相关属性:

  1. offsetParent 返回该元素带有定位的父级元素,如果父级没有定位就往上一级找,直到bdoy;
  2. offsetTop 返回该元素距离带有定位的父元素的上方距离, 如果都没有定位, 以文档左上角为准
  3. offsetLeft 返回该元素距离带有定位的父元素的左侧距离, 如果都没有定位, 以文档左上角为准
  4. offsetWidth 返回自身的宽度 (包括padding, 边框, 内容)
  5. offsetHeight 返回自身的高度 (包括padding, 边框, 内容)
  6. offset属性获取到的数据都不带单位, 并且是只读属性

其他方法

获取元素的大小以及元素相对于视口的位置(不受父元素影响)

element.getBoundingClientRect()

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

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

相关文章

Swoole v6 能否让 PHP 再次伟大?

大家好,我是码农先森。 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求。而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信。对数据库资源的操作…

Arm Linux 修改 网络 mac 地址的方式方法

一、指令修改 查看网络信息指令 ifconfig修改网络 mac 地址,指令 ifconfig 网卡名 hw ether mac地址例如: ifconfig eth0 hw ether 08:00:27:00:01:96二、C语言程序修改 1.使用 ioctl 和 SIOCSIFHWADDR 来设置MAC地址,示例代码如下&…

【计算机毕业设计】087基于微信小程序社区养老服务

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

“ONLYOFFICE 8.1:提升用户体验和编辑功能的全面升级”

引言 官网链接 在当今快节奏的工作环境中,高效地处理文档是每个职场人士必备的技能。ONLYOFFICE 桌面编辑器凭借其强大的功能和用户友好的界面,成为了提升文档处理效率的得力助手。本文将介绍 ONLYOFFICE 桌面编辑器的核心特性,并展示如何通…

乐鑫已支持Matter 1.2标准新增多种设备类型,启明云端乐鑫代理商

随着物联网技术的飞速发展,智能家居正逐渐成为现代生活的一部分。物联网和智能家居行业应用取得了巨大的增长,一系列无线连接的智能设备涌入家庭,为家庭生活带来自动化和便利。 像是可以连网的扬声器、灯泡和中控开关,它们都可以…

AI Workflow的敏捷开发:持续创新与优化的艺术

在人工智能的浪潮中,AI Workflow作为大模型落地的关键实践,正逐渐成为技术领域的新宠。然而,随着技术的发展,我们面临着一系列挑战,如何有效地应对这些挑战,实现AI Workflow的敏捷开发,成为了一…

ROS学习记录:Hector_Mapping建图的参数设置

前言 launch文件启动Hector_Mapping的建图功能 在上一篇文章(以上链接)通过launch文件启动了Hector_Mapping建图功能,这一篇文章将在launch文件里给Hector_Mapping设置参数 一、Hector_Mapping有哪些参数 1、浏览器搜索并进入 ROS index 2…

使用CDN方式创建Vue3.0应用程序

CDN 的全称是 content delivery network,即内容分发网络。它是构建在现在的互联网基础之上的一层智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发和调度等功能模块,使用户就近获取所需内容&#xff0c…

Proxmox VE(PVE)上手配置指南

Proxmox VE(PVE)是一款开源虚拟化管理平台,集成了KVM和LXC技术,支持虚拟机和容器管理。它提供了一个基于Web的用户界面,支持高可用性集群、备份和恢复、实时迁移等功能,适用于企业级虚拟化环境。. 以下为安…

每日一道算法题 有效括号序列

题目 有效括号序列_牛客题霸_牛客网 (nowcoder.com) Python 1长度必须为偶数 2就像开心消消乐一样,一左一右就消掉。 class Solution:def isValid(self , s: str) -> bool:# write code here# flag[(),{},[]]# for _ in range(len(s)//2):# for i in fl…

AI+零信任 | 易安联亮相首届“矩阵杯”网络安全大赛

6月26日, 首届“矩阵杯”网络安全大赛 在青岛国际会议中心举行。大赛由360数字安全、华云安主办,赛宁网安、永信至诚、红客社区协办,致力于推动提升全民网络安全意识、发现顶尖安全人才、鼓励技术创新发展,推动安全行业共建共享…

可溶性聚四氟乙烯离子交换柱PFA层析柱微柱一体成型

PFA微柱,也叫PFA层析柱、PFA离子交换柱等,主要用于地质同位素超净化、痕量、超痕量、微量元素分析实验室。 规格参考:1.5ml、15ml、30ml等。 其主要特性有: 1、PFA层析柱(微柱)专为离子交换设计&#xff…

【Python特征工程系列】编码:非数值型数据(字符型)转化为数值型数据(案例+源码)

这是我的第310篇原创文章。 一、引言 前面我们使用的案例的数据无论是特征还是标签都是数值型数据,但是在平时工作中我们的数据往往含有非数值型特征(object,比如文本字符类型的),这时候我们就需要对这类数据进行编码…

Redis 缓存一致性

Redis 业务结构 流程图 缓存一致性 Redis 和 MySQL 中数据保持一致 双检加锁策略 主要用于解决多线程环境下的并发问题,确保在高并发场景下对共享资源的访问是互斥的,避免因竞争条件导致的不一致状态 public User findUserById(Integer id) {User user …

金航标和萨科微公司发展历程

金航标kinghelm(www.kinghelm.com.cn)和萨科微slkor总经理宋仕强介绍公司发展发展历程时说,2015年萨科微与韩国延世大学团队当年萨科微碳化硅功率器件、SiC MOS、SiC SBD成功量产,2016年萨科微在中国大陆成功注册“Slkor”商标&am…

Build with Claude:价值 3 万美元 API 积分

只要在 6 月 26 日至 7 月 10 日创建一个基于 Anthropic API 的应用,并在这里提交,前三名可瓜分 3 万美元的 Anthropic 积分。

国企:中国电信天翼物联 2025届实习生招聘 二

5G解决方案工程师(南京实习生) 应聘资格要求 岗位职责 负责5G确定专网在工业、能源行业解决方案设计。 专业、能力要求 通信相关专业,有社团组织经验。 报名地址https://young.yingjiesheng.com/xyzlogin?ctmid=ac22e6c2-8b55-41ab-86c1-f530d5cb9218&ehirejobid=1558…

LeetCode 算法:验证二叉搜索树 c++

原题链接🔗:验证二叉搜索树 难度:中等⭐️⭐️ 题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于…

202486读书笔记|《格里格外》——活在当下,享受当下

202486读书笔记|《格里格外》——活在当下,享受当下 《格里格外》天然绘著,看的作者的上一本书是《生活蒙太奇》,生活里或遇见,或想象的画面,定格那一刻,让景色时间都有了更丰富的意义。 感动又欣喜&#…

存储故障导致Oracle 19c 数据文件处于recover状态的恢复案例

1.背景 某次平台分布式存储故障,导致数据库出现ORA-00376、ORA-01110数据文件不可读报错,本文将整个恢复过程进行整理记录。 2.报错信息 在进行租户数据库打开操作时,出现了如下报错: ORA-00376: file 17 cannot be read at t…