使用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');

它是由所有的主流浏览器的支持:

http://caniuse.com/history

MDN:

HTTPS: //developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#The_pushState().C2.A0method

另外请注意,我们使用的是在这里的最后一个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;
            }
        }
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top