【问题标题】:Smooth scrolling between divs [duplicate]div之间的平滑滚动[重复]
【发布时间】:2014-11-25 10:02:32
【问题描述】:

我有一个包含大量文本的页面,并决定使用固定的导航栏,这样可以更轻松地在部分之间跳转。它工作得很好,但是我不想让页面在 div 之间跳转,而是让它上下滚动。

这是我目前所拥有的;

 <ul>
    <li><a href="#2010">2010</a></li>
    <li><a href="#2009">2009</a></li>
    <li><a href="#2008">2008</a></li>
    <li><a href="#2007">2007</a></li>
    <li><a href="#2006">2006</a></li>
    <li><a href="#2005">2005</a></li>
    <li><a href="#2003">2003</a></li>
    <li><a href="#1999">1999</a></li>
 <ul>

    <div id="2010"></div>
    <div id="2009"></div>
    <div id="2008"></div>``
    <div id="2007"></div>
    <div id="2006"></div>
    <div id="2005"></div>
    <div id="2003"></div>
    <div id="1999"></div>

另外,是否可以让指向显示的 div 的 li 元素与其他 li 元素的颜色不同?

【问题讨论】:

标签: javascript html


【解决方案1】:

好吧,拿去吧! http://jsfiddle.net/a126cwb3/11/

// handle links with @href started with '#' only
$(document).on('click', 'a[href^="#"]', function(e) {
    // target element id
    var id = $(this).attr('href');

    // target element
    var $id = $(id);
    if ($id.size() === 0) {
        return;
    }

    // prevent standard hash navigation (avoid blinking in IE)
    e.preventDefault();

    // top position relative to the document
    var pos = $(id).offset().top;

    // animated top scrolling
    $('body, html').animate({scrollTop: pos});
});

【讨论】:

  • @mrbandi,它适用于我的 Chrome。你用什么浏览器?
  • @mrbandi,好的,我明白了。我也更新了我对 IE 的回答:将 $('body') 替换为 $('body, html')
  • @dizel32 抱歉,我有点草率,它确实有效,但只是部分有效!从顶部导航到 div 时,它工作正常,但是当我尝试使用菜单从 div 到另一个 div 时,它会出错。有什么建议?哦,感谢您的帮助 dizel3d,非常感谢!
  • @mrbandi,请在jsfiddle.net上发布您的问题示例