scrollTop()

scrollTop() jQuery 方法用于滚动到页面的特定部分。
动画此方法将使滚动更平滑:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #textDiv {
        height: 1500px;
      }
      p {
        margin-top: 100px;
        height: 500px;
      }
    </style>
  </head>
  <body>
    <div id='linkDiv'>
      <a href="#link1" class="scrollLink">Scroll to link1</a>
      <a href="#link2" class="scrollLink">Scroll to link2</a>
    </div>
    <div id="textDiv">
      <p id="link1">锚点1</p>
      <p id="link2">锚点2</p>
    </div>
    <script>
      $(document).ready(function() {
          $("a.scrollLink").click(function(event) {
              event.preventDefault();
              $("html, body").animate({
                  scrollTop: $($(this).attr("href")).offset().top
                }, 500);
            });
        });
    </script>
  </body>
</html>

如果目标元素没有 id,并且我们通过其名称链接到它,则可以使用以下脚本:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #textDiv {
        height: 1500px;
      }
      p {
        margin-top: 100px;
        height: 500px;
      }
    </style>
  </head>
  <body>
    <div id='linkDiv'>
      <a href="#link1" class="scrollLink">Scroll to link1</a>
      <a href="#link2" class="scrollLink">Scroll to link2</a>
    </div>
    <div id="textDiv">
      <p id="link1">锚点1</p>
      <p id="link2">锚点2</p>
    </div>
    <script>
      $(document).ready(function() {
          $('a[href^="#"]').click(function() {
              $('html, body').animate({
                  scrollTop: $('[name="' + $.attr(this, 'href').substr(1) + '"]').offset().top
                }, 500);
              return false;
            });
        });
    </script>
  </body>
</html>

为了提高性能,你可以缓存 $('html, body') 选择器,这样它就不会在每次点击锚链接时运行:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #textDiv {
        height: 1500px;
      }
      p {
        margin-top: 100px;
        height: 500px;
      }
    </style>
  </head>
  <body>
    <div id='linkDiv'>
      <a href="#link1" class="scrollLink">Scroll to link1</a>
      <a href="#link2" class="scrollLink">Scroll to link2</a>
    </div>
    <div id="textDiv">
      <p id="link1">锚点1</p>
      <p id="link2">锚点2</p>
    </div>
    <script>
      let $root = $('html, body');
      $(document).ready(function() {
          $(a.scrollLink).click(function() {
              $root.animate({
                scrollTop: $($.attr(this, 'href')).offset().top
              }, 500);
              return false;
            });
        });
    </script>
  </body>
</html>

要更新 URL,请在 animate 回调中执行此操作:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #textDiv {
        height: 1500px;
      }
      p {
        margin-top: 100px;
        height: 500px;
      }
    </style>
  </head>
  <body>
    <div id='linkDiv'>
      <a href="#link1" class="scrollLink">Scroll to link1</a>
      <a href="#link2" class="scrollLink">Scroll to link2</a>
    </div>
    <div id="textDiv">
      <p id="link1">连接1</p>
      <p id="link2">连接2</p>
    </div>
    <script>
      let $root = $('html, body');
      $('a[href^="#"]').click(function() {
          let href = $.attr(this, 'href');
          $root.animate({
            scrollTop: $(href).offset().top
          }, 500, function() {
            window.location.hash = href;
          });
          return false;
        });
    </script>
  </body>
</html>

hash 属性用于设置或者返回 href 属性值的锚点部分。
scrollTop() 方法通过将其包含在 animate() 方法中并以毫秒为单位定义动画的持续时间来进行动画处理。
值越大,动画越慢。

scrollIntoView()

scrollIntoView() 方法用于将用户的视图滚动到调用它的元素。
将此值设置为“smooth”的行为属性将使页面平滑滚动:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <style>
      #element {
        height: 200px;
        width: 350px;
        overflow: auto;
      }
      #el1 {
        height: 200px;
        width: 1000px;
      }
      #el2 {
        height: 100px;
        width: 1000px;
      }
    </style>
  </head>
  <body>
    <div>
      <button onclick="scrollFunction1()"> Scroll to element-1 </button>
      <br>
      <button onclick="scrollFunction2()"> Scroll to element-2 </button>
      <br>
      <br>
      <br>
      <div id="element">
        <h2> 
          Click on the scroll button
        </h2>
        <div id="el1">
          <h2>Element-1</h2> </div>
        <div id="el2">
          <h2>Element-2</h2> </div>
      </div>
    </div>
    <script>
      function scrollFunction1() {
        let e = document.getElementById("el1");
        e.scrollIntoView({
          block: 'start',
          behavior: 'smooth',
          inline: 'start'
        });
      }
      function scrollFunction2() {
        let e = document.getElementById("el2");
        //This ends the block to the window 
        //bottom and also aligns the view to the center 
        e.scrollIntoView({
          block: 'end',
          behavior: 'smooth',
          inline: 'center'
        });
      }
    </script>
  </body>
</html>
如何在单击锚定链接时创建平滑滚动

平滑滚动允许只需单击一次即可在页面节之间跳转,而无需手动上下滚动。在你的网页上有这个功能肯定会得到用户的赞赏。那么,让我们看看使用什么方法来创建平滑滚动。

日期:2020-06-02 22:16:15 来源:oir作者:oir