JavaScript鼠标移动事件

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

✨ 前言

        鼠标移动是用户界面中非常重要的交互行为。学习区分不同的鼠标移动事件,可以帮助我们更准确地处理鼠标活动,创建出色的用户体验。

        本文将详细介绍 mousemove、mouseover/out 以及 mouseenter/leave 事件之间的区别,并通过示例说明在何种场景下使用每个事件。准备好学习后,你将能够自由控制各种鼠标事件。

✨ 正文

本文介绍 mousemove,mouseover/mouseout,mouseenter/mouseleave 的区别。

mousemove

当鼠标移动时重复触发。

ball.onmousemove = function(event) {let newTop = event.clientY - ball.clientHeight / 2;let newLeft = event.clientX - ball.clientWidth / 2;ball.style.left = newLeft + 'px';ball.style.top = newTop + 'px';
};

mouseover/mouseout

当鼠标穿过任意子元素也会触发:

<div><button>Button</button>
</div><script>
div.onmouseover = () => alert(`Mouse over DIV`);
div.onmouseout = () => alert(`Mouse left DIV`);  
</script>

 

鼠标移入移出 <button> 也会触发 <div> 的事件。

mouseenter/mouseleave

只有穿过最外层元素自身边界时才触发:

div.onmouseenter = () => alert(`Entered DIV`);
div.onmouseleave = () => alert(`Left DIV`);

内部元素移动不影响。

这更符合实际需要。

嵌套 div

对于嵌套 <div>,bubbleeful 事件同样适用,例如:

<div><div>...</div>
</div><script>// 外层 DIV 的事件只在 "自己的" 边界出发outer.onmouseenter = () => alert(`Enter outer DIV`);outer.onmouseleave = () => alert(`Leave outer DIV`);
</script>

 

事件对象属性

鼠标事件对象包含鼠标位置信息:

  • pageX/pageY - 相对于文档的坐标
  • clientX/clientY - 相对于视口的坐标
    elem.onmousemove = function(e) {// e.pageX, e.pageY是基于文档// e.clientX, e.clientY是基于视口  
    };

client坐标会随滚动变化,page坐标保持不变。

阻止冒泡

所有鼠标事件默认会冒泡。如果需要阻止冒泡可以使用:

elem.onmouseover = function(e) {e.stopPropagation();
};

 

这可以实现比如 hover 效果时防止触发底层事件。

跨浏览器问题

mouseenter/leave 事件不是 IE8 以下版本支持,需要通过 mouseover/out 兼容:

function handleEnter() {// 鼠标进入时处理函数  
}elem.addEventListener('mouseover', function(e) {if (!isDescendant(elem, e.relatedTarget)) {handleEnter();}  
})
  • 通过判断相关元素是否为后代来模拟 enter/leave 事件。

 

✨ 结语

        理解不同鼠标事件的触发规则,可以防止事件混淆,也让我们可以选择最符合需求的事件。

        本文不仅区分了 mousemove、mouseover 和 mouseenter 的区别,也介绍了事件对象的坐标属性,以及如何兼容老版本 IE 浏览器。希望通过这个博客,大家可以彻底掌握各种鼠标事件的使用场景。如果还有疑问,欢迎在评论区讨论。

    

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

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

相关文章

小白也能学会的Oracle优化教程-主打零基础

没错&#xff0c;这一篇不是标题党&#xff0c;真的是小白也能学会的Oracle 优化教程&#xff0c;学会了能解决很大一部分优化问题&#xff01;&#xff01; 1、这篇文章适用于哪些人 尤其适用于我这样的数据库小白、系统工程师、不懂SQL优化的部分开发人员。 如果你是一个专…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

Seurat - 聚类教程 (1)

设置 Seurat 对象 在本教程[1]中&#xff0c;我们将分析 10X Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上对 2,700 个单细胞进行了测序。可以在此处[2]找到原始数据。 我们首先读取数据。 Read10X() 函数从 10X 读取 cellranger 管道的输出&…

nvm安装nodejs 报错certificate has expired or is not yet valid

今天在使用nvm安装nodejs时&#xff0c;突然报如下错误&#xff1a; 从报错信息中很容易知道这是因为镜像凭证过期&#xff0c;所以我们只需要换个镜像即可。 打开你nvm的安装目录下的settings.txt文件&#xff0c;将下面两行添加到里面&#xff0c;如果已经有的就覆盖。 nod…

猫头虎分享已解决Bug || 深入剖析内存溢出问题:OutOfMemoryError or MemoryLeakException

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

RocketMQ事务消息

事务消息 应用场景&#xff1a; ​ 事务消息是RocketMQ非常有特色的一个高级功能。他的基础诉求是通过RocketMQ的事务机制&#xff0c;来保证上下游的数据一致性。 ​ 以电商为例&#xff0c;用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购…

MATLAB实现LSTM时间序列预测

LSTM模型可以在一定程度上学习和预测非平稳的时间序列,其具有强大的记忆和非线性建模能力,可以捕捉到时间序列中的复杂模式和趋势[4]。在这种情况下,LSTM模型可能会自动学习到时间序列的非平稳性,并在预测中进行适当的调整。其作为循环神经网络(RNN)的特殊形式,继承了循…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

v-if 和v-for的联合规则及示例

第073个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使用&#xff0c;computed&a…

单片机学习笔记---LED点阵屏显示图形动画

目录 LED点阵屏显示图形 LED点阵屏显示动画 最后补充 上一节我们讲了点阵屏的工作原理&#xff0c;这节开始代码演示&#xff01; 前面我们已经说了74HC595模块也提供了8个LED&#xff0c;当我们不使用点阵屏的时候也可以单独使用74HC595&#xff0c;这8个LED可以用来测试7…

【原创 附源码】Flutter海外登录--Google登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月8日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…

PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle、Spark执行流程

目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快&#xff1f; Spa…