如果悬停然后等待,否则继续

时间:2012-11-29 01:52:58

标签: jquery

我使用jquery 1.3.2。我尝试将简单的jquery写入我网站上实现的ajax购物车。 功能ajaxCartOpenCart() - 打开购物车区块(只是取消隐藏)和ajaxCartCloseCart()

我添加了简单的代码,添加到购物车后,取消隐藏购物车块,等待4秒钟并关闭购物车块。

ajaxCartOpenCart();
setTimeout(function() {
  ajaxCartCloseCart()
}, 4000);

问题:我需要创建一个条件 - 如果在4秒这段时间内。鼠标进入#cart-block,然后不要关闭它,等待鼠标离开。否则计算4秒并关闭购物车。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您可以清除超时,然后在鼠标离开时调用ajax函数。类似的东西:

var t = setTimeout(function () {
   // ...
}, 4000);

$('element').hover(function () {
  clearTimeout(t);
}, function () {
  ajaxCartCloseCart();
});

答案 1 :(得分:1)

我使用setInterval创建了与此类似的内容,以显示和隐藏顶栏

演示jsfiddle:http://jsfiddle.net/frictionless/QmLAv/

$(function() {

   var showTime = 5000;
   var transition = 'slow';
   var target = $('.headerbar');
   var flag = false;

    target.slideDown(transition);
    var id = setInterval(function(){hide(target);}, showTime);

    var hide = function(item) {
        debugger;
        if(flag){
            return;
        }
        clearInterval(id);
        item.slideUp(transition);
    };

    target.hover(function() {
        flag = true;
        clearInterval(id);
        $(this).show();
    }, function() {
        flag = false;
        id = setInterval(function(){hide(target);}, showTime);
    });

});​

答案 2 :(得分:0)

您可以使用css控制隐藏/显示购物车,如下所示。 我认为这是最简单的方法,因为您不需要关心setTimeout和setInterval,这可能会导致意外结果。

<style type="text/css">
    .shopCart .shopCartDetail
    {
        border: 1px solid;
        width: 100px;
        display: none;
    }
    .shopCart:hover .shopCartDetail
    {
        display: block;
    }
</style>
<div class="shopCart">
    Shop Cart
    <div class="shopCartDetail">
        This is Shop Cart Detail</div>
</div>
<script type="text/javascript">
    $('.shopCart').hover(function () {
        //Ajax update content
    });
</script>