2010-05-26 52 views
1

我使用jQuery动画有点我的网站,但我有一些行为有点问题:jQuery的 - 效果+自动隐藏

我有一个div,它突然从的顶部出现页面甩头:

$(minipopup).animate({ 
    marginTop: '+=' + (240) + 'px' 
}, 1000); 

$(minipopup).effect("shake"); 

这种迷你弹出带有X关闭它,否则,它会在几秒钟后自动关闭:

setTimeout(function() { 
     $('#minipopup').effect("explode");   
        }, 10000); 

$('#closePopup').click(function() { 
     $('#minipopup').effect("explode"); 
        }); 

一切正常,只是,如果用户点击他看到CLOSE按钮爆炸效果和弹出窗口有效消失,但在10秒后(我在setTimeout下定义的那个)之后,用户再次看到弹出式爆炸(只是效果,导致弹出窗口不可见)。如果用户已经手动关闭了弹出窗口,我该如何避免“鬼影”爆炸?

在此先感谢。

回答

0

可以稍微改变你的点击处理程序,如:

$('#closePopup').click(function() { 
    $('#minipopup').effect("explode", function() { 
    $(this).remove(); 
    }); 
}); 

这工作,如果你不再需要的元素。

另外,如果您需要再次元素,告诉你setTimeout()功能只做效果如果该元素的使用:visible selector,这样仍清晰可见:

setTimeout(function() { 
    $('#minipopup:visible').effect("explode");   
}, 10000); 

在这两种选择会停止匹配一个你不想再制作动画的元素。

+0

你的第二个替代方案对我来说非常合适。非常感谢。 – lidermin 2010-05-26 14:47:04

+0

@lidermin - 谢谢:)很高兴它适用于最小的变化 – 2010-05-26 14:56:47

0

设置setTimeout给一个变量,像这样:

var timer = setTimeout(function() { 
    $('#minipopup').effect("explode");   
       }, 10000); 

,然后在点击事件,使用clearTimeout取消超时:

$('#closePopup').click(function() { 
     $('#minipopup').effect("explode"); 
     clearTimeout(timer); 
        }); 
0

你需要清除计时器时用户关闭弹出窗口。

var timer =setTimeout(function() { 
     $('#minipopup').effect("explode");   
        }, 10000); 

$('#closePopup').click(function() { 
     clearTimeout(timer); 
     $('#minipopup').effect("explode"); 
        });