Der*_*會功夫 8 javascript jquery html5
popState当网址发生变化(向后或向前)时,将触发该事件.最近我注意到,例如,在http://www.example.com/:
<a href="#anchor">Top</a>
Run Code Online (Sandbox Code Playgroud)
也将触发popState,导致页面"重新加载".
我怎么知道如果它是相同的URL并且只有#部分发生了变化?
$(window).bind("popstate",function(){
swap(location.href);
})
Run Code Online (Sandbox Code Playgroud)
在该示例中,当您单击"顶部"链接(见上文)时,页面将转到#anchor,但它也会触发popState并导致重新加载,这是我不期望的.
我从事件中找不到任何东西来确定这是否只是一个锚点更改,因此我必须自己使用以下代码跟踪它:
function getLocation() {
return location.pathname + location.search;
}
var currentLocation = getLocation();
$(function() {
$(window).on("popstate", function() {
var newLocation = getLocation();
if(newLocation != currentLocation) {
// DO STUFF
}
currentLocation = newLocation;
});
})
Run Code Online (Sandbox Code Playgroud)
该位置存储时没有散列,因此,由于单击带有锚点的链接而触发popstate时,getLocation方法将返回与以前相同的结果,并且不会发生交换页面的代码。
为了确保正确跟踪当前位置,每当您使用pushState()或replaceState()更改状态时,还需要更新变量。
您可以检查添加了window.location.hash哪种类型的锚点并采取适当的操作。#
此外,通过检查,window.onhashchange您可以区分完整 URL 更改window.location.href或只是哈希更改。
例子:
window.onhashchange = function()
{
console.log('Hash change:' + window.location.hash);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3844 次 |
| 最近记录: |