scrollTop等于0,即使div位于页面的下方

时间:2017-06-09 18:16:55

标签: javascript jquery html css scrolltop

我有2个div。包含页面上半部分的一个。而另一个直接位于顶部div之下。第二个div在页面上大约有1.5个视口。但是,当我按下导航按钮时,我尝试使页面滚动到第二个div。它将我带到页面顶部。即使它引用了第二个div的scrollTop属性。

1 个答案:

答案 0 :(得分:0)

scrollTop将始终等于位置0.如果要滚动到不同的div,则需要使用offset并滚动到散列位置。如果您使用的是Bootstrap,则可以使用ScrollSpy。如果没有,那么您可以使用此代码来平滑滚动到散列位置。

在你的情况下,哈希值应该是div的ID - 你将通过在你的按钮/链接上设置一个href来匹配你希望按钮/链接滚动到的div的ID。

因此,您的链接可能如下所示:

 <a href="#somediv">Some Link</a>

你的div可能看起来像这样:

 <div class="someclass" id="somediv"></div>

这个JS会将滚动处理到正确的位置:

// Select all links with hashes
$('a[href*="#"]')
  // Remove links that don't actually link to anything
  .not('[href="#"]')
  .not('[href="#0"]')
  .click(function(event) {
    // On-page links
    if (
      location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') 
      && 
      location.hostname == this.hostname
    ) {
      // Figure out element to scroll to
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      // Does a scroll target exist?
      if (target.length) {
        // Only prevent default if animation is actually gonna happen
        event.preventDefault();
        $('html, body').animate({
          scrollTop: target.offset().top -80
        }, 1000, function() {
          // Callback after animation
          // Must change focus!
          var $target = $(target);
          $target.focus();
          if ($target.is(":focus")) { // Checking if the target was focused
            return false;
          } else {
            $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
            $target.focus(); // Set focus again
          };
        });
      }
    }
  });