2013-10-13 145 views
0

基本上,有一個屏幕,如果你鏈接一個按鈕,屏幕向上滑動,然後出現另一個屏幕。問題是,slideUp()函數需要一些時間才能執行,另一個屏幕出現在slideUp函數執行完畢之前。我希望它可以讓另一個屏幕等待,直到slideUp功能執行完畢,直到另一個屏幕出現。這裏是主要的Javascript:

$('#sidebar ul li a').click(function(){ 

    $('#sidebar ul .clicked').removeClass('clicked'); // when an <a> is clicked, remove .clicked class from any other <a>'s 

    $(this).addClass('clicked'); 

    hidePrevSlide(); //this calls slideUp in the current screen 
    $(this).showCurrentSlide(); //this shows another screen before hidePrevSlide is even finished executing/sliding Up 
}); 

我試圖

hidePrevSlide(function(){ 
    $(this).showCurrentSlide(); 
}); 

但隨後這打破了某些原因的代碼。有什麼方法可以完成我正在做的事情嗎?

+0

可以的jsfiddle呢? – stevemarvell

+0

當然,我會嘗試,給我像5分鐘 – user2817200

+0

@stevenmarvell編輯:好吧有可能只是讓我知道如果有一種方法來使用$(this)函數內的函數?或者在執行$(this).showCUrrentSlide()之前等待3秒。線?我嘗試使用setTimeout,但它沒有工作.. jsfiddle'ing這將需要相當多的時間,因爲我使用django和HTML與一堆python代碼和變量混合。 – user2817200

回答

1

試試這個:

$('#sidebar ul li a').click(function(){ 

    $('#sidebar ul .clicked').removeClass('clicked'); // when an <a> is clicked, remove .clicked class from any other <a>'s 

    $(this).addClass('clicked'); 

    var current_slide=$(this); 
    hidePrevSlide(function(){ 
     current_slide.showCurrentSlide(); 
    }); 
    $(this).showCurrentSlide(); //this shows another screen before hidePrevSlide is even finished executing/sliding Up 
}); 

我可以看到你正在運行到一個範圍問題。通過在函數之前存儲$(this),您將可以在下面的函數中訪問該變量。

對於一個小的優化,你應該避免使用多個$(this)使我們可以重新使用我們的current_slide變量,像這樣:

$('#sidebar ul li a').click(function(){ 
    var current_slide=$(this); 

    $('#sidebar ul .clicked').removeClass('clicked'); // when an <a> is clicked, remove .clicked class from any other <a>'s 

    current_slide.addClass('clicked'); 

    hidePrevSlide(function(){ 
     current_slide.showCurrentSlide(); 
    }); 
    current_slide.showCurrentSlide(); //this shows another screen before hidePrevSlide is even finished executing/sliding Up 
}); 
+0

你應該刪除最後的'showCurrentSlide()'調用 – stevemarvell

+0

嗯,我用你的代碼,但它仍然給出相同的問題。我將嘗試使用current_slide使用setTimeout,看看是否有效。 – user2817200

+0

完美無瑕,所以解決方案實際上是在函數之前將$(this)存儲在一個變量中。我不知道爲什麼hidePrevSlide(函數(){current_lide.showCurrentSlide(); }); 沒有工作,但我沒有存儲current_slide在一個變量,然後做 \t window.setTimeout(函數(){ \t current_slide.showCurrentSlide(); \t},500); 它的工作..謝謝!另外,當我在對stackoverflow發表評論時,如何在評論中編寫代碼? – user2817200