首先,我似乎无法弄清楚pushState函数中的第一个参数是用来做什么的?我需要传递什么?我只想在浏览页面时更改URL。我正在查询视口中当前元素的ID,并且它的ID也应该是URL中的链接。使用以下代码可以正常工作。
现在我有两个问题:
1.)当前当我滚动页面时,地址栏中的URL成功更改。当我最初加载页面时,如何查询地址栏中的URL/哈希值? 所以,想象一下,我现在有一个链接:
2.)点击后退按钮时,如何找到地址栏中最后的更改?所以,当我单击浏览器上的后退按钮时,我想找到
感谢您的帮助!
更新:
var currentHash,
url;
if (history && history.pushState) {
$(window).scroll(function() {
hash = $('.layer:in-viewport').attr('id');
catHash = $("#"+hash).parent('section').attr('id');
var data = "nothing";
if ( catHash != undefined )
url = "/" + catHash + "/" + hash;
else
url = "/" + hash;
if ( currentHash != hash ) {
window.history.pushState(data, hash, url);
}
currentHash = hash;
});
}
现在我有两个问题:
1.)当前当我滚动页面时,地址栏中的URL成功更改。当我最初加载页面时,如何查询地址栏中的URL/哈希值? 所以,想象一下,我现在有一个链接:
www.url.com/deep
,我想找出/deep是什么? 我是否只需查询整个top.location并在每个“/”上拆分即可?我的意思是这些链接实际上不存在,那么在调用经过pushState函数操作的URL时,如何避免404页面?2.)点击后退按钮时,如何找到地址栏中最后的更改?所以,当我单击浏览器上的后退按钮时,我想找到
/deep
,以便可以导航回页面上的该位置。我猜这可能是通过popstate工作的,但我无法找到如何做到这一点!感谢您的帮助!
更新:
window.history.pushState("test", hash, url);
…
$(window).bind('popstate', function(event){
console.log(event.data);
});
这个始终为空。难道不应该返回“test”吗?
event.state
而不是event.data
。 - Quentinconsole.log(event);
时,没有event.state
。只有数据,然而数据始终为 "null",如果我尝试记录event.state
,它也始终为 null! - matt$(window).bind('popstate', function(event){
不起作用,但是window.onpopstate = function(event) {
可以! - mattevent.originalEvent.state
。 - Fauntleroy