jQuery在两秒钟之后上下滑动鼠标上/下的内容 - bug

时间:2012-03-02 00:41:41

标签: jquery settimeout jquery-easing jquery-slide-effects

当鼠标悬停在图像上方时,跨度内容会在两秒后向下滑动,同时当我将光标移出图像时,在两秒跨度滑动后,这样可以正常工作。

如果有人将鼠标移动到该跨度上,我想显示跨度,并且我的问题就开始了......

我不知道我是否足够清楚,但我认为代码会告诉你的不仅仅是单词:)

链接:http://jsfiddle.net/zDd5T/3/

HTML:

<img id="image" src="button_green.png" />
<span id="content">
    <a href="http://www.google.com">Link</a>
    Some content here
</span>

CSS:

#image{
   left:0px;
   position:absolute;
   z-index: 10;
}
#content{
   top:48px;
   left:0px;
   position:absolute;
   height: 100px;
   border: 1px solid #f00;
   display: block;
   z-index: 0;
   width: 100px;
}

JavaScript的:

$(document).ready(function() {
    $('#content').hide();
    var over_img = false;
    var over_span = false;
    $('#image').live('mouseover', function() {
        over_img = true;
        setTimeout(function() {
            $('#content').show('slide', {
                direction: 'up'
            }, 1000);
        }, 2000);
    });
    $('#content').live('mouseover', function() {
        over_span = true;
        setTimeout(function() {
            $('#content').show('slide', {
                direction: 'up'
            }, 1000);
        }, 2000);
    });
    $('#image').live('mouseout', function() {
        over_img = false;
        if (!over_img && !over_span) {
            setTimeout(function() {
                $('#content').hide("slide", {
                    direction: "up"
                }, 1000);
            }, 2000);
        }
    });
    $('#content').live('mouseout', function() {
        over_span = false;
        if (!over_img && !over_span) {
            setTimeout(function() {
                $('#content').hide("slide", {
                    direction: "up"
                }, 1000);
            }, 2000);
        }
    });
});

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,我会按如下方式重新构建您的标记:

<div class="container">
   <img ... >
   <div class="content">
     .....
   </div>
</div>

然后,不是将您的悬停事件绑定到图像,而是将其绑定到父容器。这样,一旦显示内容div,它仍然在容器父元素内,其中有悬停事件绑定到它,因此当鼠标悬停在图像或内容div(或任何其他元素)上时它将保持可见在容器内)

答案 1 :(得分:0)

对于jQuery 1.7+,使用on()代替.live(),不推荐使用。

我相信这可以解决你的问题:

$(document).ready(function() {
    var T1, T2;
    $('#content').hide();
    $('body').on({
        mouseenter: function() {
            clearTimeout(T2);
            T1 = setTimeout(function() {
                 $('#content').slideDown(1000);
            }, 2000);
        },
        mouseleave: function() {
            clearTimeout(T1);
            T2 = setTimeout(function() {
                 $('#content').slideUp(1000);
            }, 2000);    
        }
    }, '#image, #content');
});​

这是FIDDLE