像这样的点击一个侧边选项,页面平缓过渡到目的位置是如何做到的?

看了京东的页面,点击1、2、...nF,页面即可平缓的滚到目的位置,请问是如何实现的?
图片描述

阅读 4.1k
4 个回答

使用jQuery的animate + scrollTop

$(document).animate({scrollTop:$("#7F").offset().top}, 1000);

document 可能在不同的浏览器里需要进行兼容处理

每层楼和侧边栏的按钮对应起来,点击按钮时,计算楼层距离页面顶部的距离,这个距离就是要滚动的距离,然后使用动画库滚动页面就好了,如上面兄弟说的 jquery 的 animate

我利用原本錨點( anchor )的特性,把原本跳轉到錨點的預設行為給取消掉,改由 jQuery 來控制捲軸動畫,這樣做的好處是只要很簡單的新增 <a href="#錨點名稱"> <section id="錨點名稱"></section>,就可以實現添加更多區塊,不一定要 section ,其他元素也可以,例如 h1 div

例子

Codepen

實現

html

<div class="main">
  <div class="sidebar">
    <ul class="navigation">
      <li><a href="#1f">1F</a></li>
      <li><a href="#2f">2F</a></li>
      <li><a href="#3f">3F</a></li>
    </ul>
  </div>
  <div class="content">
    <section id="1f" class="floor 1f">
      <h1>1F</h1>
    </section>
    <section id="2f" class="floor 2f">
      <h1>2F</h1>
    </section>
    <section id="3f" class="floor 3f">
      <h1>3F</h1>
    </section>
  </div>
</div>

javascript

// 綁定導航列每個 a 的點擊事件
$('.navigation > li > a').click(function(e) {
  e.preventDefault() // 取消預設動作(直接跳轉到錨點)
  // 改由 jquery 的 animate 實現平滑移動到錨點
  $('html, body').animate({
      // 取得原先要移動至的元素,取得離上方距離,在 300ms 內完成捲軸動畫
      scrollTop: $( $.attr(this, 'href') ).offset().top
    }, 300);
  })
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题