【问题标题】:JQuery ScrollTop scrolling too farJQuery ScrollTop 滚动太远
【发布时间】:2016-06-02 13:31:43
【问题描述】:

我想创建一个完整的页面背景图像,一旦用户点击(任何地方),就会向下滚动到剩余的内容,然后隐藏自己。最初不会有滚动条,然后一旦发生 click>scrolltop,并且背景 div 被隐藏,滚动条会通过删除溢出隐藏类出现。

我的问题是,当我单独使用 scrolltop 时,页面会直接滚动到我选择的元素,但是当我添加 javascript 代码以隐藏初始介绍 div(用户单击)时, 页面跳下远远超过 ScrollTop 点。

如果有人有任何想法,我已在此处包含我的 JSFiddle 链接。

【问题讨论】:

标签: javascript jquery html css


【解决方案1】:

display: none 正在将.intro 的高度更改为 0,因此您有两种选择:

.hidden 的 CSS 更改为使用 visibility: hidden

更改.animate的第一个参数以考虑.intro的高度:$(".one").offset().top - $(".intro").height()

我还建议将removeClassaddClass 调用放在回调函数中,而不是使用.delay()

选项 2 + 回调用法示例:

$(document).ready(function() {
  $(".intro").click(function() {
    $('html, body').animate({
      scrollTop: $(".one").offset().top - $(".intro").height()
    }, 700, function() {
      $("body").removeClass("bleh");
      $(".intro").addClass("hidden");
    });
  });
});

【讨论】:

  • 我看到了不同之处。非常感谢!它仍然会滚动大约... 10px(大约)超过 .one div。是否有一些填充或我在这里看不到的东西?
  • 在 Chrome DevTools 中检查它 - 似乎有一个奇怪的上边距被添加到 html 元素,但它没有显示为边距或填充,它不影响 @987654333 @。可能只是因为该工具的查看器窗口在 iframe 中加载了内容。我也试过 JSBIn,结果是一样的。
  • 我们都注定要失败......我会继续玩它。不过,我明白你对偏移量的负修饰符的观点。感谢您的帮助!
  • 顺便说一句,我发现了奇怪的小 10px 偏移的原因。它是应用于 H1(或 P,或我在那里的任何文本)的边距。不知道为什么它会将边距推到容器 div 的边缘之外,但就是这样。
【解决方案2】:

这有用吗?添加hidden 类后,您可以滚动到one div 的顶部。

$(function(){
  $(".intro").on("click", function(){
    $("body").removeClass("bleh");
    $("html, body").animate({
      scrollTop : $(".one").offset().top 
    }, function(){

      $(".intro").addClass("hidden")
      $(document).scrollTop(0)

    })
  })
})
html, body{
  height: 100%;
}
body{
  margin: 0;
}
.bleh{
  overflow: hidden;
}
.hidden{
  display: none;

}
.intro{
  background: red;
  text-align: center;
  padding: 20px;
  background-position: center;
  background-size: cover;
  height: 100%; 

}


.one {
  width: 100%;
  background-color: black;
  display: block;
  height: 400px;
}

.two {
  width: 100%;
  background-color: blue;
  display: block;
  height: 400px;
}
.three {
  width: 100%;
  background-color: black;
  display: block;
  height: 400px;
}

.four {
  width: 100%;
  background-color: blue;
  display: block;
  height: 400px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<body class="bleh">
    <div class="intro">
        <h1>Click anywhere to scroll down to main content</h1>
    </div>
    
    <div class="one">
        
    </div>
    
    <div class="two">
        
    </div>
        <div class="three">
        
    </div>
        <div class="four">
        
    </div>
</body>

【讨论】:

  • 啊!是的!完美的。正如我所拥有的那样,根据 J. Titus 对 ScrollTop 偏移量的评论,它起作用了,但是按照这个顺序,没有滚动效果,因为我同时触发了所有三个。使用您的解决方案,它们都以比我更好的顺序触发,因此它实际上是滚动的,然后隐藏了介绍 div。谢谢!干得好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2019-10-07
相关资源
最近更新 更多