2010-05-26 59 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"); 
        });