Javascript 导航时限制页面滚动区域单击

Javascript 导航时限制页面滚动区域单击,javascript,jquery,html,css,Javascript,Jquery,Html,Css,单击导航选项卡中的菜单时,我使用以下jquery代码滚动到特定部分。你现在一定已经猜到了,这是一个单页的网站。更进一步说,问题是当点击菜单时,它会滚动到特定的DIV部分,但标题隐藏在菜单的DIV后面。我的意思是,它会向上滚动太多。我想限制滚动的级别。假设它在达到停止点之前停止200px。可能吗 这是我的密码 $(document).ready(function() { $('body').find('a').click(function(){ var $href = $(th

单击导航选项卡中的菜单时,我使用以下jquery代码滚动到特定部分。你现在一定已经猜到了,这是一个单页的网站。更进一步说,问题是当点击菜单时,它会滚动到特定的DIV部分,但标题隐藏在菜单的DIV后面。我的意思是,它会向上滚动太多。我想限制滚动的级别。假设它在达到停止点之前停止200px。可能吗

这是我的密码

$(document).ready(function() {
    $('body').find('a').click(function(){
      var $href = $(this).attr('href');
      var $anchor = $($href).offset();
      var $li = $(this).parent('li');
      $li.addClass('active');
      $li.siblings().removeClass('active');
      $('body,html').animate({ scrollTop: $anchor.top }, 1000);
      return false;
    });
});

也许,您需要更改“动画”scrollTop参数:

 $('body,html').animate({ scrollTop: $anchor.top - 200px }, 1000);

与其硬编码标题值,更好的方法是动态获取标题的高度,这样就不会在移动设备和其他设备中产生问题

 $(document).ready(function() {
        $('body').find('a').click(function(){
          var $heightEx = $('.navbar').height(); // use your respective selector
          var $href = $(this).attr('href');
          var $anchor = $($href).offset();
          var $li = $(this).parent('li');
          $li.addClass('active');
          $li.siblings().removeClass('active');
          $('body,html').animate({ scrollTop: ($anchor.top - $heightEx)  }, 1000);
          return false;
        });
    });
编辑
这是我个人使用的代码

$("a").on('click', function(event) {
$heightEx = $('header').height(); 
if (this.hash !== "") {
  event.preventDefault();
  var hash = this.hash;
  $('html, body').animate({
    scrollTop: ($(hash).offset().top - $heightEx)
  }, 800);
} 

}))

我记得这不是偏移量的作用吗?你能用你想解释的内容写一个答案吗?你确定你的代码是正确的吗?因为它不工作,加上200px在我的代码编辑器(ATOM)中以红色突出显示,这表明它是一个错误。不应该
$anchor.top-200px
$anchor.top-200
?是的,我的错误,它应该是整数200。是的,完美。。谢谢:)如果这对您有帮助,您可以将答案标记为正确:)等等。。我只是注意到它只有在我连续打开菜单时才起作用。例如,假设我的菜单是Home,About,Services,所以当我连续单击它们时,它工作得很好,但如果我跳转,它就不工作了。我的意思是说,我在家,我跳到了服务台,跳来跳去。因此,序列单击在这里中断。它不再工作了。我的意思是,它再次滚动的方式太高时,跳,然后再次,如果我去连续它再次工作。为什么?它在添加代码之前的行为还是现在的行为?不知道发生了什么错误。如果对您来说很容易,或者另一个选项是使用我上面编辑的代码,那么您可以创建一个JSFIDLE。注意:上面的代码不会执行活动的操作。检查这是否适用于您,然后我也将提供活动功能的代码