向下滚动单个页面时是否可以更改URL

时间:2011-05-27 00:27:42

标签: javascript ajax url url-rewriting

使用ajax向下滚动单个页面时是否可以更改网址?我在一个页面上都有一个网站,并希望产生这种效果。

示例:

www.blablabla.com/blog

用户向下滚动...

www.blablabla.com/blog/entry-name

我知道哈希......我可以屏蔽网址吗?

7 个答案:

答案 0 :(得分:28)

我知道这是一个较旧的问题,但浏览器已经改变,而且现在,可以做海报要求的事情。这意味着大多数其他答案不再有效。我发布了一种方法来实现这一点,以便它可以帮助使用Google的人找到正确的答案。

简而言之,在现代浏览器(支持HTML 5的浏览器)上,您可以。请查看this文章。

它基本上归结为以下代码行:

window.history.pushState("object or string", "Title", "/new-url");

执行上述代码会将URL更改为example.com/new-url,并将帮助您完成所需的操作。

对于演示,您可以查看使用此方法的Webby Awards。只需向上或向下滚动,看看裸露的地址。效果令人印象深刻。

答案 1 :(得分:6)

您可以使用pushState()修改浏览器URL栏中显示的URL,而无需重新加载或使用哈希。只要您的浏览器支持HTML5即可。

https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

答案 2 :(得分:4)

没有。不知道你为什么要这么做。

正如您所提到的,唯一的方法是将其添加到页面的哈希值,例如

http://www.website.com/blog/#entry-name

然后滚动到页面的那一部分,如:

if (window.location.indexOf("#") > 0) {
    var entry_id = window.location.substring(window.location.indexOf("#"));
    $('html, body').animate({
        scrollTop: $(entry_id).offset().top
    }, 2000);
}

编辑:window.history.pushState可能很长时间。

答案 3 :(得分:0)

https://github.com/browserstate/history.js/ history.js

怎么样?

包括对数据,标题,replaceState的持续支持。支持jQuery,MooTools和Prototype。对于HTML5浏览器,这意味着您可以直接修改URL,而无需再使用哈希值。

答案 4 :(得分:0)

可以使用window.pushState方法。

答案 5 :(得分:-1)

是的,你可以,但这有点棘手。

如果您在index.html页面上有此内容:

  <a id="link-to-later" href="#later">Go to later</a>
  <p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p><p>lorem ipsum</p> 
  <a id="later" name="later">Some later anchor</a>

然后点击顶部链接会转到下面的锚点而不重新加载页面,网址将为index.html#later

通过使用window.onscroll事件,您可以将事件挂钩到向下滚动页面的用户。事件处理程序可以包含类似$('#link-to-later').click()的内容,它会将用户的浏览器发送到指向具有later锚点的页面上。

你需要做一些工作来防止它过于波动,但它是可行的。

答案 6 :(得分:-2)

不,出于安全原因,您不能使用javascript更改网址