【问题标题】:scrollTop addclass makes a jumpscrollTop addclass 跳转
【发布时间】:2018-11-13 09:03:10
【问题描述】:

我几乎是编码方面的新手,我目前正在一家公司工作作为我学习的一部分。 他们给了我一个 html 和 css 文件来编辑,我必须根据滚动的距离使图像出现和消失。在从顶部到达具体距离后,我设法让班级消失了,但它发生了奇怪的跳跃。代码不是我的,我只是编辑了一些东西,如果缺少任何信息,请告诉我,以便我添加。

HTML 是这样的:

jQuery("document").ready(function($){ 

var nav = $('#feedback_form'); 

$(window).scroll(function () { 
    if ($(this).scrollTop() > 445 && $(this).scrollTop() < 1289 ) { 
        nav.addClass("f-nav");
    } else { 
        nav.removeClass("f-nav");
    } 

}); 

它在 css 中所指的“f-nav”类是这个:

.f-nav {
z-index: 9998!important;
position: fixed!important;
top: 0; 

-webkit-animation: fadeIn ease-in 1; /* Safari and Chrome */
-moz-animation: fadeIn ease-in 1; /* Firefox */
-ms-animation: fadeIn ease-in 1; /* Internet Explorer */
-o-animation: fadeIn ease-in 1; /* Opera */
animation: fadeIn ease-in 1;

-webkit-animation-duration:2s;
-moz-animation-duration:2s;
-ms-animation-duration:2s;
-o-animation-duration:2s;
animation-duration:2s;

}

addClass 也会发生跳跃,但不太明显。 就像我说的那样,我对此很陌生,所以我不知道问题可能出在哪里。

这是一个解决问题的方法:

https://gyazo.com/9b3e0a910c095fa3b180b9501eed9981

【问题讨论】:

  • 使用position:sticky
  • 我将位置从固定更改为粘性,但是当类被删除时跳转仍然存在。
  • 可以先提供demo重现问题。
  • 我不能分享太多的 HTML 或 CSS,因为它来自我的公司,而不是我的。这就是为什么我想知道是否有人可以通过我共享的数据找到问题的原因或解决方案。此外,我对制作演示的了解还不够,因为我不确定哪些代码行重要,哪些不重要。
  • 我也刚刚意识到,在它们出现在卷轴上之前,你看不到这些面孔,而使用我的代码,这些面孔就在那里,一旦滚下它们,它们就会跟随滚动。我的代码中唯一的问题是它由于某种原因而产生的小跳跃。

标签: javascript jquery html scrolltop


【解决方案1】:

试试这个,它会起作用的

if ($(window).scrollTop() > 445 || $("html").scrollTop() > 289) {
  $("#feedback_form").fadeIn();
} else {
  $("#feedback_form").fadeOut();
};

您确定在您的代码中声明了 $(this) 吗? 接受我的代码是否有效,或者让我知道是否有任何问题。我可以帮你。

【讨论】:

  • 如果我使用它而不是我拥有的东西,它确实会掩盖跳跃(谢谢!),但是图像不会跟随滚动。我的目标是面部跟随滚动直到某一点然后消失(如gyazo所示)。关于 $(this),如果它被声明了,我在哪里看?它应该在css中有一个类吗?
【解决方案2】:

不好意思在这里写代码我得再做一个回答: 关于$(this),你必须知道什么是$(this)。例如:

$(".ex").click(function(){
      $(this).addClass("example");
})

$(this) 上面的意思是 $(".ex)。

并且图像没有跟随滚动,我认为这是因为 z-index(可能)。

所以试试这个:

if ($(window).scrollTop() > 445 || $("html").scrollTop() < 1289) {
  $("#feedback_form").fadeIn().addClass("myClass");
} else {
  $("#feedback_form").fadeOut();
};

.myClass{
   position: fixed; /*add !important if you need*/
   z-index: 9999; /*add !important if you need*/
   width: 100%;
}

【讨论】:

  • 使用您编写的代码,它确实看起来很流畅,但是当您到达页面末尾时它并没有消失。它也出现在页面的中间并且比它应该的要小。但主要问题已经解决了。
  • 实际上,我做错了: if ($(window).scrollTop() > 445 || $("html").scrollTop() > 289) 并且我修复了它: if ( $(window).scrollTop() > 445 || $("html").scrollTop()
  • 事实上,当我使用“ 289”时,它根本不会消失。另外,我仍然不知道为什么它在 apge 的中间,或者为什么它比它应该的小。和css有关系吗?
  • 可能是因为您的网页高度小于1289,所以将数字“1289”更改为更小的数字。它比它应该的小,因为 css 位置:固定,使用可以添加:宽度:100%(或数字)到类 .myClass
  • 它仍然是一样的,我将继续尝试不同的值或将你的代码与我的代码混合,如果它有效,我会接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2018-07-26
相关资源
最近更新 更多