我該如何在頁面上放置鏈接來更改url,但不會在不使用散列狀態的情況下更改頁面?禁用錨定標記
我想把鏈接,更改url和滾動到頁面的相應部分。我不想使用散列,因爲他們只是跳到部分,而不是滾動,我認爲散列在url中看起來不太好。
我該如何在頁面上放置鏈接來更改url,但不會在不使用散列狀態的情況下更改頁面?禁用錨定標記
我想把鏈接,更改url和滾動到頁面的相應部分。我不想使用散列,因爲他們只是跳到部分,而不是滾動,我認爲散列在url中看起來不太好。
你試過了jQuery ScrollTo插件嗎? http://archive.plugins.jquery.com/project/ScrollTo
[滾動不是問題](http://www.abeautifulsite.net/blog/2010/01/smoothly-scroll-to-an-element-without-a-jquery-plugin/),可以是沒有插件完成。問題是網址的變化 – Hat
HTML5瀏覽器歷史記錄(又名pushState的)是現代的手法
https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history
這是相當廣泛支持的瀏覽器
瀏覽器現在有安全功能,確保地址欄中顯示的URL與實際顯示的內容相匹配。如果不同時更改頁面,則無法更改位置。
但是,您可以在任何地方滾動頁面而無需更改URL。滾動到一個特定的元素,獲得其位置和使用.animate()
:
$('body').animate({scrollTop: $('#element').position().top});
與使用e.preventDefault()
取消URL變化的.on('click',...)
處理器結合這一點,你是好去。
$('a[href^=#]').on('click', function(e) { // apply to all hash links
var el = $(this).attr('href'); // get the href
e.preventDefault(); // cancel default click action
$('body').animate({
scrollTop: $(el).position().top // scroll to the href ID instead
});
});
http://www.whathaveyoutried.com –
@Blazemonger pushState的並不實際允許你顯示一個不同的URL到 '真實'(原件)URL,只要它具有相同的方案和域(這是安全性方面)。你可以在http://html5demos.com/history –