2012-03-09 154 views
3

我正在創建一個單頁並使用pushState更改地址。現在,如果我推回來,popstate會被觸發,並且想要將頁面從當前位置滾動到最後位置。這當然有效,但頁面跳轉到頂部。popstate - 需要點擊兩次後退按鈕才能返回

有誰知道如何防止這種行爲?我使用jQuery動畫滾動....

謝謝:)

//編輯:好,我發現,如果我動畫滾動,然後更改URL,也不會跳來跳去 - 但現在我不得不按兩次後退按鈕找回...
http://www.testwebseiten.at/user/falk/stein-jagersbacher.at

的代碼是有點亂,所以我解釋這一點:

var scrollCurrentSection = function(event) { 
     if (typeof event.preventDefault != 'undefined') 
      event.preventDefault(); 

     var page = ""; 
     if (window.location.href.substr(-1) == '/') 
      page = sjag.index; 
     else 
      page = window.location.href.match(/([^\/]+)$/)[1]; 

     $this  = $('a[href$="'+page+'"]'); 
     if ($this.length) { 
      sjag.scrollToSection($this); 
     } 
    } 
    window.onpopstate = scrollCurrentSection; 

sjag包含幾個選項和方法...所以sjag.index只包含'index.php',sjag.scrollToSection包含動畫。

在點擊導航的鏈接,下面的函數被調用:

// set navi 
    $("#navi a, #navi-add a").click(function(event) { 
     var data = $(this).data('sjagpage'); 
     if (typeof data == 'undefined') 
      return; 

     event.preventDefault(); 
     // animate scrolling 
     $this = $(this); 
     sjag.scrollToSection($(this), function() { 
      history.pushState("", "", $this.attr('href')); 
     }); 
    }); 

$(this).data('sjagpage')包含了jQuery的元素。

當我沒有設置動畫滾動時,只需要一次點擊就可以返回 - 但是當我現在爲它設置動畫時,它需要兩個...爲什麼?

+0

我們需要的代碼。你可以發佈嗎? – 2012-03-09 13:13:11

+0

@Deepak:我沒有 - 我希望你現在瞭解一點:) – lumio 2012-03-09 13:38:58

回答

0

我認爲這個問題是event.preventDefault是添加到event對象的jQuery功能,但你不綁定使用jQuery的事件處理程序。因此,默認導航沒有被阻止,因此最終有2個歷史項目可以導航回去。

相反的:

window.onpopstate = scrollCurrentSection; 

你應該結合它像:

$(window).bind("popstate", scrollCurrentSection); 
+0

我看到了...動畫或完成功能被調用兩次...我試圖隔離那個錯誤:)謝謝 – lumio 2012-03-09 14:07:07

+0

好的問題是我爲html和body生成了動畫 - 所以回調函數被執行了兩次。 – lumio 2012-03-09 14:59:06

相關問題