2013-02-06 86 views
0

我只在一兩個月前開始編碼,而且遇到了一個我似乎無法找到解決方案的問題。jQuery - 在加載時隱藏div,在動畫完成後顯示

我有一個幻燈片,當點擊一個按鈕時會打開,我遇到的問題是幻燈片本身('右控制')的控件中的一個在頁面加載時可見。

當幻燈片顯示打開時,我需要將其與幻燈片一起淡入,然後在關閉幻燈片時隱藏。

任何幫助,將不勝感激。

這裏有一個幻燈片中的代碼:

//幻燈片

$("#slideshow").css("overflow", "hidden"); 

manageControls(currentPosition); 

$('.control').click(function() { 

    currentPosition = ($(this).attr('id') == 'right-control') ? currentPosition + 1 : currentPosition - 1; 

    manageControls(currentPosition); 

    $('#slides').animate({ 
     'left': slideWidth * (-currentPosition) 
    }, 600); 
}); 

function manageControls(position) { 

    if (position === 0) { 
     $('#left-control').hide(); 
    } else { 
     $('#left-control').show(); 
    } 

    if (position == slidesNumber - 1) { 
     $('#right-control').hide(); 
    } else { 
     $('#right-control').show(); 
    } 
} 
//End Slideshow 

這裏是我的jsfiddle與全碼:

http://jsfiddle.net/tVsjY/2/

+0

你的例子究竟是不是工作? –

+0

右側控件在加載時可見,我需要它隱藏起來,並且只有在幻燈片放映時纔會淡入。 (你可以看到,在我張貼的jsFiddle鏈接。) – 2150814582

+0

所以一切正常,只是我不知道如何隱藏該權利控制,直到按鈕被點擊和幻燈片div滑出。 – 2150814582

回答

0

發現什麼,我需要做一個變通方法。

由於manageControls函數隱藏/取決於#slides的當前位置,顯示左/右控制所有需要做隱藏。控制上的負載也隱藏#slides

所以,如果我穿上9號線以下:

$("#center, #slideshow, .slide").hide(); 

然後.show它的點擊 - 它的作品!

最新的更新:

添加以下行,使其美觀applealing的眼睛(控制現在淡入視圖):

$(".control").stop(true).delay(1800).animate({opacity: "0.5"}, 2000); 

    $(".control").stop(true).animate({opacity: "0"}, 400); 

這是我更新的jsfiddle:

http://jsfiddle.net/tVsjY/18/

詩這還不算漂亮,當幻燈片被激活時,這兩個控件需要淡入淡出。將在下一個工作,然後發佈更新。

0

我感到有點羞愧給人一種修復,而不是的解決方案給剛剛開始編碼的人,但也許這就是你想要的。把下面的你的jsfiddle的第50行應該修復你的問題通過隱藏的額外可見跨度:

$('.control').hide(); 

但我不太滿意這樣做的原因是因爲我學不到,爲什麼跨度首先顯示出來給大家解釋一下。我可能會繼續關注它,但是讓我知道這是否只是你要找的。


更新的解決方案:發現問題/解決方案 你躲在manageControls功能/顯示控件將始終隱藏一個,並顯示一個。

問題:兩個控件首先都是可見的。
您最初調用manageControls(currentPosition);在第38行,currentPosition的值爲0,所以左側控件被隱藏,然後顯示右側,這已經是可見的開始。

解決方案:替換manageControls(currentPosition);上線38以下:

$('.control').hide(); //Hides both controls 



讓我知道,如果一切正常/有道理:)

+0

感謝您的建議。添加$('。control')。hide();無論是38行還是50行,都會永久隱藏控件,這不能解決我的問題。我需要控制(左或右,取決於currentPosition)在幻燈片顯示出來時顯示,然後在不顯示時隱藏。 – 2150814582

+0

它不會永久留在我身邊。下面,似乎在我的電腦上完美地工作(加它行50):http://jsfiddle.net/tVsjY/14/&http://jsfiddle.net/tVsjY/14/embedded/result/ – asifrc

+0

真的嗎?所以你可以在添加$('control')時使用幻燈片。hide();? – 2150814582

0

。在你的

function manageControls(position){} 

一個邏輯上的錯誤。您使用的功能爲了兩個目的。

  1. 顯示/隱藏根據左/右控制上滑動你是
  2. 顯示/隱藏取決於是否滑塊是可見的或隱藏的左/右控制。

但它始終工作,如果它是第一個場景。我的建議是簡單地爲你的函數添加另一個參數。

function manageControls(position, flag){} 

在「顯示」,「隱藏」和「檢查」用於示出兩種控制,隱藏對照和滑動號顯示與標誌寄值。然後根據情況重新編寫函數調用。

設置。控制在CSS中「無」 display屬性。並在js中進行以下更改。

$(document).ready(function() { 

var out = 0; 
var currentPosition = 0; 
var slideWidth = 400; 
var slides = $(".slide"); 
var slidesNumber = slides.length; 

$("#button").click(function() { 

    if (out === 0) { 
     manageControls(currentPosition, 'show'); // Show controls on slide show 
     $("#center, #slideshow, .slide").animate({ 
      width: "400px" 
     }, { 
      queue: false, 
      duration: 1900 
     }); 
     $(".slide").delay(2000).animate({ 
      opacity: "1" 
     }, 1500); 
     out = 1; 
    } else { 
     manageControls(currentPosition, 'hide'); // Hide controls on slide hide 
     $("#center, #slideshow, .slide").animate({ 
      width: "0px" 
     }, { 
      queue: false, 
      duration: 2000 
     }); 
     $(".slide").stop(true).animate({ 
      opacity: "0" 
     }, 250); 
     out = 0; 
    } 
}); 

//Slideshow 
$("#slideshow").css("overflow", "hidden"); 

// No need for this line if .control set to hidden in css. 
//manageControls(currentPosition); 

$('.control').click(function() { 

    currentPosition = ($(this).attr('id') == 'right-control') ? currentPosition + 1 : currentPosition - 1; 

    manageControls(currentPosition, 'check'); // Show/hide controls on control click 

    $('#slides').animate({ 
     'left': slideWidth * (-currentPosition) 
    }, 600); 
}); 

function manageControls(position, flag) { 
    // Checks for control display 
    if (flag == 'check') { 
     if (position === 0) { 
      $('#left-control').hide(); 
     } else { 
      $('#left-control').show(); 
     } 

     if (position == slidesNumber - 1) { 
      $('#right-control').hide(); 
     } else { 
      $('#right-control').show(); 
     } 
    } else if (flag == 'show') { 
     $('.control').show(); 
    } else if (flag == 'hide') { 
     $('.control').hide(); 
    } 
} 
//End Slideshow 
}); 

但是您需要檢查您的代碼。這可能是你是初學者,但你應該始終致力於優化你的代碼。你的代碼需要。

+0

這不是一個邏輯錯誤,manageControls只用於顯示/隱藏左/右控制取決於我所在的幻燈片,它不用於根據幻燈片是否可見顯示控件。從一開始我就遇到了這個問題,當幻燈片顯示或隱藏時,我無法弄清楚顯示左/右控制的代碼。 – 2150814582

+0

感謝您的解決方案,這對我來說是一個開始。不幸的是,它不起作用。當幻燈片顯示不可見時,它會顯示兩個控件的加載情況。還有其他建議嗎?附:對於我需要優化代碼的方式,您有什麼建議嗎? – 2150814582

+0

我測試過,它的工作原理。您是否添加了我說過的樣式定義「將.control的顯示屬性設置爲'無'。」? –