jquery的hover show hide问题

如连接:鼠标移入的时候希望img hide 文字show 反之。但是老师闪烁,原因知道是鼠标移入后img就没了 触发了mouseout事件,求解决

http://codepen.io/guoxiangwen...

阅读 4.7k
7 个回答
<div id='test'>
    <img src="http://guoxw.qiniudn.com/nanituo.png" alt="">
    <p style="display:none">nanituo</p>
</div>

你的 <div id="test"> 没有指定高度,所以高度是根据里面的内容来决定的。你的图片显示出来大概高70(估算的,具体值不重要),而 <p> 中的文本大概高 16。所以在显示图片的时候,从下移入,进入70范围但在16范围之外,触发 mouseover,但由于隐藏了图片,显示文本,高度立即改变为16,此时鼠标已经在 <div> 的外面了,所以触发 mouseout,此时显示图片,隐藏文本,高度变为70,触发 mouseover …… 结果就闪烁了。

如果你从上面移入,在 16 范围内,就不会出现闪烁,可以试试。

解决办法,固定 <div> 的高度。

原因是你没有对#test进行约束,可以添加css:

#test{
  width: 100px;
  height: 100px;
  border: 1px solid black;
}

试试。
PS: 黑线主要是易于找到#test(可有可无),

给父元素设置固定宽高就解决了,不过具体为啥我也不清楚。
而且你引用的那个cdn的jquery不带http协议不会有问题吗?

刚好遇到类似问题,可以使用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>
    <div id='test'>
        <img src="http://guoxw.qiniudn.com/nanituo.png" alt="">
        <p style="display:none">nanituo</p>
    </div>

    <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>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题