我可以更新window.location.hash无需网页滚动?
-
22-07-2019 - |
题
使用JavaScript,是有办法,而不滚动网页window.location.hash更新?
我有直接切换一个div的可见性他们之下可点击标题元素。我想在历史上/富#酒吧点击标题,但不想对页面滚动的时候。所以,从导航/富#酒吧离开时,我就可以使用后退按钮,并有其ID的DIV是window.location.hash将返回后可见。
这种行为可能?
解决方案
此行为是非常可能的。你应该看看一些已经发展到给你这个功能的库。
真正简单的历史: http://code.google.com/p/reallysimplehistory/一> SWFAddress: http://www.asual.com/swfaddress/
其他提示
要改变哈希而无需重新加载页面/滚动,你现在可以简单地使用HTML5 history.pushState
。
history.pushState(null,null,'#hashexample');
它是由所有的主流浏览器的支持:
MDN:
另外请注意,我们使用的是在这里的最后一个URL参数,它可以是任何URL,所以它不限于哈希。
容易,因为它得到
var scrollmem = $('html,body').scrollTop();
window.location.hash = hash;
$('html,body').scrollTop(scrollmem);
您可以尝试的另一件事情是改变元素的ID的散列点,暂时的。为我工作!
function changeHashWithoutScrolling(hash) {
var id = hash.replace(/^.*#/, ''),
elem = document.getElementById(id)
elem.id = id+'-tmp'
window.location.hash = hash
elem.id = id
}
想添加到凯瑟琳回答评论,但我没有代表尚未 -
的最佳解决方案然而,它并没有在Chrome中工作,我作为$(“HTML”)scrollTop的()总是返回0 - 一个小修改解决了问题:
scrollmem = $('html').scrollTop() || $('body').scrollTop();
window.location.hash = hash;
$('html,body').scrollTop(scrollmem);
来自阳光的答案巴斯我提出这个函数还避免了未定义和空值:
function changeHashWithoutScrolling(hash) {
var id;
var elem;
id = hash.replace(/^.*#/, '');
if (id) {
elem = document.getElementById(id);
if (elem) {
elem.id = id + '-tmp';
window.location.hash = hash;
elem.id = id;
}
}
}
不隶属于 StackOverflow