【问题标题】:Prevent local links from scrolling but keep the click in the browser history防止本地链接滚动,但将点击保留在浏览器历史记录中
【发布时间】:2012-03-29 15:59:54
【问题描述】:

我正在使用 jQuery 通过本地锚点及其 onclick 属性来切换网页上内容的可见性。最好防止页面滚动到锚点,以保持位于内容顶部的部分菜单“始终”可见。 jQuery 的 event.preventDefault() 似乎可以解决问题,但我意识到浏览器历史记录也被禁用了。而且锚点也不会显示在url中,这不是我喜欢的。

有没有办法只部分禁用默认行为,比如滚动?

The webpage's link.

【问题讨论】:

    标签: jquery


    【解决方案1】:

    我建议坚持使用 preventDefault 来抑制滚动,并使用 native history object's pushState/replaceState method(如果可用)和/或 balupton's history.js polyfill 来获取本机功能。

    function anchorClick(e){
        e.preventDefault();
        //do stuff
        history.pushState(null/*state object*/, null/*title*/, document.location + $(e.target).attr('id'));
    }
    

    例子:

    【讨论】:

    • 这看起来很有希望。谢谢。
    【解决方案2】:

    这有点难看,但这是我能想到的最好的事情:

    $(document).delegate("a[href^=\\#]", "click", function() {
      var $body = $("body"),
          left = $body.scrollLeft(),
          top = $body.scrollTop();
      setTimeout(function() {
        window.scrollTo(left, top);
      }, 0);
    });
    

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 2012-08-19
      相关资源
      最近更新 更多