Jquery:(10行以下)当body.scrolltop>这个'h2',淡出那个h2,如果不是,淡出它回来

发布于 2024-09-13 14:38:24 字数 476 浏览 6 评论 0原文

当主体窗口的顶部大于或等于 h2 标签时,淡出 h2,如果窗口顶部回到 h2 上方,则淡出该 h2。

此代码将淡出每个单独的 h2,如下所示你向下滚动它,但是当我向上滚动时,它不会淡入淡出,而且我不确定我做错了什么。我不是最擅长jquery。非常感谢任何帮助。

$(window).scroll(function() {

 $('.grid_12').find('h2').each(function () {

      if ($(this).offset().top <= $('body').scrollTop()) {
          $(this).fadeOut(500)
      } else if 
          ($(this).offset().top >= $('body').scrollTop()) {
     $(this).prev().fadeIn(500)
         }   
 });
});

When the top of the body window is greater than or equal to the h2 tag, fade the h2 out, if the top of the window goes back up above that h2, fade that h2 back in.

This code will fade out each individual h2 as you pass it scrolling down, but when i scroll back up, it wont fade it back in, and i'm not sure what i'm doing wrong. i'm not the best at jquery. any help is very appreciated.

$(window).scroll(function() {

 $('.grid_12').find('h2').each(function () {

      if ($(this).offset().top <= $('body').scrollTop()) {
          $(this).fadeOut(500)
      } else if 
          ($(this).offset().top >= $('body').scrollTop()) {
     $(this).prev().fadeIn(500)
         }   
 });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Oo萌小芽oO 2024-09-20 14:38:24

试试这个(演示):

$(window).scroll(function() {
 // added 100 so you can see the fade before it goes out of the viewport
 var bodyTop = $(window).scrollTop() + 100;

 $('h2').each(function() {
  var thisTop = $(this).offset().top,
      faded = $(this).is('.faded');
  if ( thisTop < bodyTop ) {
   if (!faded){
    // fade out h2 if not already faded
    $(this).addClass('faded').animate({ opacity: 0 });
   }
  } else {
   if (faded) {
    // fade in h2 if faded
    $(this).removeClass('faded').animate({ opacity: 1 });
   }
  }
 });

});

注意:

  • 移动了 scrollTop (应该是为了window btw)在循环之外以最小化函数调用。
  • 拉出 $(this).offset().top 因此每个循环只调用一次。
  • 将 fadeIn/fadeOut 替换为 animate,因为淡入淡出会导致 display:none(将尺寸设置为零),从而导致页面在消失时跳转。
  • 添加了“faded”类,以防止每次窗口滚动时重复动画。
  • 删除了 else if,因为它是不必要的。
  • 删除了 prev(),因为您应该定位 h2 而不是其他任何东西。

Try this (demo):

$(window).scroll(function() {
 // added 100 so you can see the fade before it goes out of the viewport
 var bodyTop = $(window).scrollTop() + 100;

 $('h2').each(function() {
  var thisTop = $(this).offset().top,
      faded = $(this).is('.faded');
  if ( thisTop < bodyTop ) {
   if (!faded){
    // fade out h2 if not already faded
    $(this).addClass('faded').animate({ opacity: 0 });
   }
  } else {
   if (faded) {
    // fade in h2 if faded
    $(this).removeClass('faded').animate({ opacity: 1 });
   }
  }
 });

});

Notes:

  • Moved the scrollTop (should be for the window btw) outside of the loop to minimize function calls.
  • Pulled out the $(this).offset().top so it's only called once per loop.
  • Replaced fadeIn/fadeOut with animate since fading results in a display:none (sets dimensions to zero) and thus causes the page to jump when it disappears.
  • Added a "faded" class to prevent repeating animation each time the window scrolls.
  • Removed else if as it is unnecessary.
  • Removed prev() as you should target the h2 and nothing else.
稳稳的幸福 2024-09-20 14:38:24

删除 .prev()

Remove .prev().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文