javascript - 如何在具有子 DIV 的 DIV 上使用 Javascript onmouseout
问题描述
我正在开发一个用于学习目的的网站。我在右上角创建了一个菜单按钮,如下面的屏幕截图所示。
下面的屏幕截图显示了触发菜单按钮时页面的外观。
您可以看到展开的菜单面板中有 3 个部分。我正在尝试使用 javascript onmouseout 在将鼠标移到 DIV 之外时自动隐藏菜单。但是一旦鼠标指针到达中间的灰色 div,菜单就会隐藏。虽然这个灰色 div 是菜单面板的子级,但菜单一旦到达这个灰色 div 就会隐藏起来。如何克服这个问题?
<div class="menupanel">
<div class="menulist">
<img class="menu-logo" src="assets/img/logo-g.svg" alt="">
<ul>
<li><a class="menulist-link" href="#">Home</a></li>
<li><a class="menulist-link" href="#">About Us</a></li>
<li><a class="menulist-link" href="#">Services</a></li>
</ul>
</div>
<div class="contact">
<div class="cont-container">
<h2>Address</h2>
<p>No. 39, LIG3, Surya City, Bangalore - 560008</p>
<hr>
<p><ion-icon class="cont-icons" name="call-outline"></ion-icon><a href="tel:+919663396036">+91 9X9X9X9X9X</a></p>
<p><ion-icon class="cont-icons" name="mail-outline"></ion-icon><a href="mailto:info@theubiquity.in">info@theubiquity.in</a></p>
<hr>
</div>
</div>
<div class="menuhover">
<img class="menu-img" src="assets/img/home.jpg" alt="">
<img class="menu-img" src="assets/img/about.jpg" alt="">
<img class="menu-img" src="assets/img/service.jpg" alt="">
</div>
解决方案
您需要mouseleave
代替mouseout
:
mouseleave
并且mouseout
相似但不同之处在于mouseleave
不会冒泡,而mouseout会。这意味着mouseleave
当指针退出元素及其所有后代mouseout
时触发,而当指针离开元素或离开元素的后代之一时触发(即使指针仍在元素内)。
演示:
const parent = document.querySelector('#div-soup')
parent.addEventListener('mouseout', () =>
console.log('mouseout'))
parent.addEventListener('mouseleave', () =>
console.log(' mouseleave '))
#div-soup{width:45%}div{margin:5px;padding:5px;background:rgba(0,0,0,.1)}.as-console-wrapper{width:50%;max-height:100%;position:fixed;overflow:hidden!important;padding:0;margin:0;right:0;left:50%!important;bottom:0!important;max-height:100%!important}
<div id="div-soup"><div><div><div><div><div><div><div></div><div></div><div></div><div></div><div></div><div></div></div></div></div></div></div></div></div>
推荐阅读
- permissions - 403:禁止,Google 上的 Actions 推送来自另一个项目的通知
- reactjs - 将分页箭头放置在表格的两侧而不是页码
- c - c中的三元运算符和goto,同时执行
- c++ - 没有定义的 C++ 链接时间资源“分配”
- python - 获取 JSON 列表中的第一个和最后一个元素并查找时间差
- mysql - 填补开始结束时间戳之间的空白
- google-cloud-platform - Stackdriver API 指标显示许多 429 错误,但未超过配额
- oracle-apex - 设置 Oracle APEX 无线电组默认值
- ajax - 在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题
- keycloak - 根据注册 URL 的类型为用户分配 Keycloak 领域角色