2012-04-11 38 views
3

問題很簡單,我知道,但我有一段時間試圖弄清楚。我在一個頁面上有8個div,用於保存隱藏起始的圖像庫。當用戶點擊一個圖標來查看一個畫廊時,他們選擇的第一個畫廊全部變得閃亮。但是當他們選擇另一個時,他們正在觀看的那個開始淡出,而另一個淡入,並且隨着第一個div被隱藏而移動到其正確的位置。jQuery-div在下一次開始消退之前不會完全消失

參見jsfiddle

所以,我的問題是顯而易見的:
如何讓他們正在查看的圖庫在下一個圖片淡入正確的空間之前完全淡出。

回答

2

你可以把div的彼此頂部position:absolute;

工作例如:http://jsfiddle.net/Ghokun/wnTte/13/

+0

當他解決動畫問題時,我不認爲div的位置有問題, – Falle1234 2012-04-11 17:34:46

+0

就是這樣做的。謝謝大家,玩!我也不得不玩弄一些畫廊的元素,但它是金色的!也就是說,我的jQuery是_very_基本的,可能可以清理乾淨,但我現在不打算睡覺的狗。 – Adam 2012-04-11 17:48:21

+0

@亞當,這隱藏了問題,它並沒有真正解決真正發生的事情。請注意,您的原始顏色不會先消失。現在,如果你想交叉淡入淡出,那是一個不同的問題。 – 2012-04-11 17:57:19

1

怎麼樣的文檔(fadeOut)與

$('#image_one').delay(500).fadeIn(); 

和喜歡聰明的更換

$('#image_one').fadeIn(); 

....通過這句話

+0

好的,如果你正在處理一個DIV。 – Adam 2012-04-11 22:10:31

6

您的問題進行了說明:

如果多個元素是ani交配,重要的是要注意,回調是每個匹配元素執行一次,而不是整個動畫一次。

換句話說,因爲你在動畫兩件事情,回調將被調用兩次。由於您的某個div已隱藏,因此fadeOut立即完成*,並立即回撥。

* 即時完成(如果已顯示/隱藏)顯示/隱藏類型助手功能是唯一的。如果您構建了自己的淡入淡出動畫,則無論當前狀態如何,它總是會花費指定的時間量。

你可以通過幾種方法解決這個問題。最簡單的是鏈相互裏面你​​調用,而不是調用一個兩個元素:

$('.icon_one').click(function() { 
    $('#image_two').fadeOut(function() { 
     $('#image_three').fadeOut(function() { 
      $('#image_one').fadeIn(); 
     }); 
    }); 
}); 

因爲一個通常會隱藏已,它會落空瞬間,但其他需要時間。無論哪種方式,只有在兩者都完成後纔會淡入。

演示:http://jsfiddle.net/jtbowden/XQnhs/

當然,有一點改變你的HTML,你可以做所有這三個與一個單擊處理:

<div id="image_one" class="imageBox" style="background-color:red;height:50px;width:50px">&nbsp;</div> 
<div id="image_two" class="imageBox" style="background-color:blue;height:50px;width:50px">&nbsp;</div> 
<div id="image_three" class="imageBox" style="background-color:yellow;height:50px;width:50px">&nbsp;</div> 

<div data-num="one" class="icon_show">Red</div> 
<div data-num="two" class="icon_show">Blue</div> 
<div data-num="three" class="icon_show">Yellow</div> 

腳本:

$('.icon_show').click(function() { 
    var showID = '#image_' + $(this).data('num'); 
    $('.imageBox:visible').fadeOut(function() { 
     $(showID).fadeIn(400); 
    }); 
}); 

演示:http://jsfiddle.net/jtbowden/NAcPW/

關鍵是您可以根據您點擊的鏈接自動找出顯示哪一個。在這種情況下,我通過在數據屬性中存儲數字來完成此操作。您也可以使用ID的一部分,或者通過使用index來計算偏移量,然後將其輸入eq

演示:http://jsfiddle.net/jtbowden/NnN58/

有很多的方法來簡化這個代碼。

3

這是有趣的...我喜歡你的設置方式您jsfiddle-它使人們更容易玩用。看看這是否有幫助.. fadeOuts必須超過元素。只能淡出可見的一個。我認爲你的問題正在被淡出的元素調用。

這裏是你的jsfiddle略有變化..

$(function(){ 
     $('#image_two,#image_three').hide(); 

//1//  

      $('.icon_one').click(function(){     
       $('#image_two:visible,#image_three:visible').fadeOut(
        function(){ 

        $('#image_one').fadeIn(); 
        } 
      ); 
      }); 

//2// 
alert("binding"); 
    $('.icon_two').click(function(){ 
     $('#image_one:visible,#image_three:visible').fadeOut(
      function(){ 
       $('#image_two').fadeIn(); 
      } 
              ); 
    }); 

    //3// 

    $('.icon_three').click(function(){ 
     $('#image_one:visible,#image_two:visible').fadeOut(function(){ 
     $('#image_three').fadeIn(); 
     }); 
    }); 

}); 
+0

這裏的問題是'icon_#'是菜單元素,用戶可以點擊任何元素,所以'$('#..., #...,#...')fadeOut涵蓋了所有可能的可見元素。 – Adam 2012-04-11 17:50:50

+0

嘿亞當...我真的認爲這個問題是已經淡出的項目,但可能有多種方式來使它工作。 – 2012-04-11 21:03:56

+0

問題依然存在:哪個項目可見?如何確定?在這個意義上,淡出所有項目以淡出可見的項目。我想象一個'如果/然後'的情景可能會照顧到這一點,但現在我的駕駛室已經有點失控了。 – Adam 2012-04-11 22:09:51