扫码关注官方订阅号
如连接:鼠标移入的时候希望img hide 文字show 反之。但是老师闪烁,原因知道是鼠标移入后img就没了 触发了mouseout事件,求解决
http://codepen.io/guoxiangwen...
刚好遇到类似问题,可以使用jquery的mouseleave和mousenter这两个函数代替下
使用mouseleave和mousenter这两个事件代替mouseout和mouseover事件
原因:因为mouseover事件是必然冒泡的,一旦子元素mouseover了,本元素必然mouseover(除非子元素上禁止冒泡了)。
而鼠标在这个元素的子元素上触发mouseenter事件都不会触发这个元素的mouseenter事件。即:一旦进入,在子元素间的mouseenter不算是在本元素上的mouseenter。
你运行看下
<!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <style> .warp { width: 1000px; flex-wrap: wrap; border: 1px solid #555; display: flex; padding: 20px; } .item { margin: 0; display: flex; padding: 10px; width: 178px; height: 178px; -webkit-align-items: center; -ms-flex-align: center; align-items: center; justify-content: center; /*border: 1px solid green;*/ } #test { width:100px; height:100px; } img { width: 100px; } p { width:100px; height:100px; } </style> <body> <p id='test'> <img src="http://guoxw.qiniudn.com/nanituo.png" alt=""> <p style="display:none">nanituo</p> </p> <script src="//cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script> <script> (function($) { $('img').hover(function() { $('img').hide(); $('p').show(); }, function(e) { e.prevenDefault() }) $('p').hover(function(e) { e.prevenDefault() }, function(){ $('img').show(); $('p').hide(); }) })($) </script> </body> </html>
<p id='test'> <img src="http://guoxw.qiniudn.com/nanituo.png" alt=""> <p style="display:none">nanituo</p> </p>
你的 <p id="test"> 没有指定高度,所以高度是根据里面的内容来决定的。你的图片显示出来大概高70(估算的,具体值不重要),而 <p> 中的文本大概高 16。所以在显示图片的时候,从下移入,进入70范围但在16范围之外,触发 mouseover,但由于隐藏了图片,显示文本,高度立即改变为16,此时鼠标已经在 <p> 的外面了,所以触发 mouseout,此时显示图片,隐藏文本,高度变为70,触发 mouseover …… 结果就闪烁了。
<p id="test">
<p>
mouseover
mouseout
如果你从上面移入,在 16 范围内,就不会出现闪烁,可以试试。
解决办法,固定 <p> 的高度。
原因是你没有对#test进行约束,可以添加css:
#test{ width: 100px; height: 100px; border: 1px solid black; }
试试。PS: 黑线主要是易于找到#test(可有可无),
给父元素设置固定宽高就解决了,不过具体为啥我也不清楚。而且你引用的那个cdn的jquery不带http协议不会有问题吗?
没用过 jQuery 处理 Hide or Show ,不懂原理
本人惯用 css 解决https://codepen.io/KZ-DSF/pen...
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
刚好遇到类似问题,可以使用jquery的mouseleave和mousenter这两个函数代替下
使用mouseleave和mousenter这两个事件代替mouseout和mouseover事件
原因:
因为mouseover事件是必然冒泡的,一旦子元素mouseover了,本元素必然mouseover(除非子元素上禁止冒泡了)。
而鼠标在这个元素的子元素上触发mouseenter事件都不会触发这个元素的mouseenter事件。即:一旦进入,在子元素间的mouseenter不算是在本元素上的mouseenter。
你运行看下
你的
<p id="test">没有指定高度,所以高度是根据里面的内容来决定的。你的图片显示出来大概高70(估算的,具体值不重要),而<p>中的文本大概高 16。所以在显示图片的时候,从下移入,进入70范围但在16范围之外,触发mouseover,但由于隐藏了图片,显示文本,高度立即改变为16,此时鼠标已经在<p>的外面了,所以触发mouseout,此时显示图片,隐藏文本,高度变为70,触发mouseover…… 结果就闪烁了。如果你从上面移入,在 16 范围内,就不会出现闪烁,可以试试。
解决办法,固定
<p>的高度。原因是你没有对#test进行约束,可以添加css:
试试。
PS: 黑线主要是易于找到#test(可有可无),
给父元素设置固定宽高就解决了,不过具体为啥我也不清楚。
而且你引用的那个cdn的jquery不带http协议不会有问题吗?
没用过 jQuery 处理 Hide or Show ,不懂原理
本人惯用 css 解决
https://codepen.io/KZ-DSF/pen...