javascript - jquery的hover show hide问题
巴扎黑
巴扎黑 2017-04-11 12:43:58
[JavaScript讨论组]

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

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

巴扎黑
巴扎黑

全部回复(7)
PHPz

刚好遇到类似问题,可以使用jquery的mouseleave和mousenter这两个函数代替下

迷茫

使用mouseleave和mousenter这两个事件代替mouseout和mouseover事件

原因:
因为mouseover事件是必然冒泡的,一旦子元素mouseover了,本元素必然mouseover(除非子元素上禁止冒泡了)。

而鼠标在这个元素的子元素上触发mouseenter事件都不会触发这个元素的mouseenter事件。即:一旦进入,在子元素间的mouseenter不算是在本元素上的mouseenter。

PHP中文网

你运行看下

<!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 …… 结果就闪烁了。

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

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

PHP中文网

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

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

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

PHPz

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

阿神

没用过 jQuery 处理 Hide or Show ,不懂原理

本人惯用 css 解决
https://codepen.io/KZ-DSF/pen...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号