2014-08-28 63 views
0

我爲我的網站構建了一個滾動主頁,允許用戶單擊標題中的鏈接滾動到網站的不同部分。我也有新頁面的外部鏈接,允許用戶查看不同的項目。
無論出於何種原因,它工作的很好,但只要我到達其中一個項目頁面,然後嘗試點擊主頁,或工作鏈接無法正常工作。無需創建第二個header.php,
我如何使nav全球工作。使用主導航滾動網站問題

<script> 
$(document).ready(function(){ 
     $('a.logo, ul.nav a, #mmenu a, a.mobileLogo').bind('click',function(event){ 
      var $anchor = $(this); 

      href_arr = $anchor.attr('href').split("#"); 

      $('html, body').stop().animate({ 
       scrollTop: $('#'+href_arr[1]).offset().top - 0 
      }, 500); // it was -70     
      event.preventDefault(); 
     }); 
    }); 
}); 
</script> 

我的鏈接看起來像這樣...

<a href="/#home">Link</a> 
    <a href="/#work">Work</a> 

關於如何解決jQuery的所以它適用於外部網頁有什麼想法?

+0

是的。在你的'外部'(每一個)頁面上,你需要在URL中檢查JS * * hash *,如果檢測到,只需抓住它並將其應用到你的動畫邏輯。 (請注意,您可能希望覆蓋默認的瀏覽器行爲 - >首先轉到該錨點。)快樂Google搜索!你在這裏已經有了所有這些答案。 – 2014-08-28 20:58:20

回答

0

聽起來好像#home#work在您的產品頁面上不存在,對嗎?如果是這種情況,那麼調用event.preventDefault()實際上會阻止瀏覽器回到您的主頁。嘗試在防止默認行爲之前檢查元素是否存在。如果元素不存在,瀏覽器將正常訪問該鏈接。這是做到這一點的一種方式。

$(document).ready(function(){ 
    $('a.logo, ul.nav a, #mmenu a, a.mobileLogo').bind('click',function(event){ 
     var hash = '#' + $(this).attr('href').split('#')[1]; 

     // check if the element exists on your page 
     if ($(hash).length) { 
      // if so, scroll to it and prevent the default behavior 
      $('html, body').stop().animate({ 
       scrollTop: $(hash).offset().top - 0 
      }, 500); 
      event.preventDefault();     
     } 
    }); 
}); 
+0

正確。主頁包含nav所調用的部分。 #home#work,#about,#contact。所以在頭文件中,鏈接正在調用這些部分。但是,一旦我在工作頁面中選擇了一個項目,並從www.url.com上下載到www.url.com/project,我就無法回頭。導航不起作用了。 – user3817083 2014-08-28 21:13:22

+0

如果我添加Home它確實有效,但平滑滾動不再有效。它不會加載,然後向下滾動到工作部分。我怎麼能修改它?順便說一句,謝謝你的建議。我刪除了preventDefault。 – user3817083 2014-08-28 21:14:39