2014-09-22 92 views
1

編輯:我已經刪除了淡入淡出的新頁面,因爲我認爲這讓人感到困惑。我想讓新頁面淡入。Jquery fadeOut完成回調沒有運行,但fadeIn回調是

我寫了一個小網站,作爲一個頁面運行,看起來像一個傳統的網站。我基本上試圖做的是具有基本要素,即。導航,徽標,頁腳等,以固定到視口,並選擇導航將鏈接到的錨點。這一切工作正常,但現在試圖動畫,我有一些困難。

下面是HTML標記我的工作:

<div id="wrap"> 

    <ul id="nav"> 

     <li><a class="start" href="#link1">Page 1</a></li> 
     <li><a class="start" href="#link2">Page 2</a></li> 
     <li><a class="start" href="#link3">Page 3</a></li> 
     <li><a class="start" href="#link4">Page 4</a></li> 

    </ul> 

    <div class="contents"> 

    <div id="page" class="page1"> 

     <a class="finish" name="link1">page1</a> 

    </div> 

    <div id="page" class="page2"> 

     <a class="finish" name="link2">page2</a> 

    </div> 

    <div id="page" class="page3"> 

     <a class="finish" name="link3">page3</a> 

    </div> 

    <div id="page" class="page4"> 

     <a class="finish" name="link4">page4</a> 

    </div> 

    </div> 

</div> 

而CSS:

html, body { 
    margin: 0; 
    padding: 0; 
    overflow-x: hidden; 
} 

#nav { 
    position: fixed; 
    width: 100%; 
    margin-left: 80%; 
    z-index: 999; 
} 

li { 
    display: inline; 
} 

#wrap { 
    width: 400%; 
    height: 100%; 
} 

#page { 
    width: 25%; 
    height: 100%; 
    float: left; 
} 

.page1 { 
    background-color: blue; 
} 

.page2 { 
    background-color: red; 
} 

.page3 { 
    background-color: grey; 
} 

.page4 { 
    background-color: white; 
} 

.finish { 
    opacity: 0; 
    float: right; 
    width: 100%; 
    height: 100%; 
} 

現在這一切工作完全沒有jQuery的,它只是去直接鏈接的頁面。 這裏的Jquery使用.contents容器工作。

$(document).ready(function() { 

     //On page load, .contents will be hidden for a clean fadIn animation. WORKING 

     $('.contents').css('display', 'none'); 

     $('.contents').fadeIn(1000); 


     //Clicking any nav link will initiate animation. 

     $('.start').click(function(event) { 

     //Stops default action of going straight to anchor. 

     event.preventDefault(); 

     newLocation = this.href; 

     //newpage on fadeOut activate as seen in the url bar but not returning there on fadeIn.  

     $('.contents').fadeOut(1000, newpage); 

     //newpage on fadeIn is a debug to test of page will return to newlacation. Works but after animations finished.  

     $('.contents').fadeIn(1000); 

    }); 

     function newpage() { 

      window.location = newLocation; 

     } 

    }); 

我不知道還有什麼可以嘗試的。我唯一能想到的是完整的回調函數是fadeOut的。

+0

請解釋你在這裏想要做什麼?測試代碼似乎是令人困惑的東西:) – 2014-09-22 11:33:29

+0

我試圖通過淡出,改變到下一頁和淡入,在頁面之間轉換。 – 2014-09-22 11:43:48

回答

2

好吧,我已經完成了,但感謝您的所有建議。

這裏是固定的Jquery位:

$('.contents').fadeOut(1000, function(){ 

    newpage(); 

    location.reload(); 

}); 

基本上所需要的頁面,以便加載頁面的新的部分重新加載。然後它再次運行腳本的第一部分,該腳本負責淡化頁面。

2

由於JavaScript是異步的。但你不能改變頁面的位置。那麼第一次改變就會發生;

像這樣改變你的代碼。這應該工作。

$('.contents').fadeOut(1000, function(){ 
newpage(); 
$('.contents').fadeIn(1000, newpage); }); 
+1

原始代碼僅用於測試。這顯然是無意義的改變當前頁面的URL兩次(這是什麼'newpage'的):) – 2014-09-22 11:31:52

+0

是的,甚至增加了function(){newpage();它不能解決問題。 – 2014-09-22 11:36:34

+0

你在newpage上發表了一條提示,你只是評論你有什麼,並試圖發生什麼 – vimalpt 2014-09-22 11:40:17

0

添加操作之間適當的時機基本上都會在這裏你做的是調用錨解決問題

$('.contents').fadeOut(800, function(){ 
    newpage(); 
    $('.contents').fadeIn(100, newpage); }); 
}); 

,它會調用relavent滾動位置。使用jQuery的滾動,你可以得到平滑的結果

0

這是因爲Javascript不等待FadeOut完成,因此它同時啓動fadeOut和fadeIn。

你需要把淡入淡出中的回調函數,如果你想調用順序是:(」內容)

$淡出(1000,函數(){
[..你的函數。 ...]
$('。contents')。fadeIn(1000,newpage);}
);

+0

我明白,但即使這樣做,頁面不會重定向到錨點,而頁面完全淡出。只有在初始頁面已經淡入之後纔會重定向。 – 2014-09-22 11:51:00

+0

但我不確定我是否理解。你希望你的頁面在你打開它時淡入,然後當你點擊一個錨點,你希望它淡出,然後加載錨點鏈接,然後淡入? 爲什麼你需要第二次淡入? window.location將重新加載您的jQuery文檔.ready()函數。 所以你只需要確保所有頁面都準備好了相同的jquery腳本,並且只是擺脫第二個fadeIn,並使用window.location作爲fadeOut()的回調。 – 2014-09-22 12:03:01

+0

該網站是一個單一頁面,因此當單擊錨點時,它會轉到同一頁面上的錨點。我想要做的是,不要讓定位點之間的鏈接突然變得很麻煩,我想用fadeOut淡入淡出來爲其製作動畫。你是對的,如果我使用多個頁面,那麼這個腳本將工作。 – 2014-09-22 12:21:16