jQuery的淡出元素,因为他们滚动关闭网页,渐退,因为他们滚动回(jQuery fade out

2019-08-20 15:10发布

我希望元素淡出,因为他们滚动出页面的顶部,然后渐退的,因为他们回滚动到页面上。 我写了一些代码工作,但我正在寻找一个更好的解决方案。 这里是解决方案,我已经工作的jsfiddle: http://jsfiddle.net/wmmead/JdbhV/3/

我想找到一个更短,更优雅的代码,但就是不能完全解决它。 也许一些与一个阵列和各()方法? 如果我把一个类上的div,而不是一个ID的,它变得短了很多,但他们一下子淡出。 我希望每个框淡出,因为它滚动出的页面。

HTML

<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
<div id="box4"></div>
<div id="box5"></div>
<div id="box6"></div>

CSS

#box1, #box2, #box3, #box4, #box5, #box6 {
  width: 100px;
  height: 100px;
  background: orange;
  margin:100px auto;
}
#box6 {
  margin-bottom:600px;
}

jQuery的

var box1Top = $('#box1').offset().top;
var box2Top = $('#box2').offset().top;
var box3Top = $('#box3').offset().top;
var box4Top = $('#box4').offset().top;
var box5Top = $('#box5').offset().top;
var box6Top = $('#box6').offset().top;

$(window).scroll(function () {
if ((box1Top - $(window).scrollTop()) < 20) {
    $('#box1').stop().fadeTo(100, 0);
} else {
    $('#box1').stop().fadeTo('fast', 1);
}

if ((box2Top - $(window).scrollTop()) < 20) {
    $('#box2').stop().fadeTo(100, 0);
} else {
    $('#box2').stop().fadeTo('fast', 1);
}

if ((box3Top - $(window).scrollTop()) < 20) {
    $('#box3').stop().fadeTo(100, 0);
} else {
    $('#box3').stop().fadeTo('fast', 1);
}

if ((box4Top - $(window).scrollTop()) < 20) {
    $('#box4').stop().fadeTo(100, 0);
} else {
    $('#box4').stop().fadeTo('fast', 1);
}

if ((box5Top - $(window).scrollTop()) < 20) {
    $('#box5').stop().fadeTo(100, 0);
} else {
    $('#box5').stop().fadeTo('fast', 1);
}
if ((box6Top - $(window).scrollTop()) < 20) {
    $('#box6').stop().fadeTo(100, 0);
} else {
    $('#box6').stop().fadeTo('fast', 1);
}
});

Answer 1:

可以使用属性选择'[attr="someattr"]'利用的.each()的jQuery方法:

$(window).scroll(function () {
   $('[id^="box"]').each(function () { // <---loop the divs id starts with #box 
      if (($(this).offset().top - $(window).scrollTop()) < 20) { //<---mark the $(this).offset().top of current object
          $(this).stop().fadeTo(100, 0); //<----fadeOut the current obj
      } else {
          $(this).stop().fadeTo('fast', 1); //<----fadeIn the current obj
      }
   });
});

你可以在这里乘坐演示:

DEMO



Answer 2:

这是你的jsfiddle的版本被认为有以下几个原因更好 :

  • 那么功能上可以分解(其破碎成小功能):你和其他编码器,也更容易提高可读性在未来保持如果你需要改变一些东西。
  • 灵活性:你可以改变的箱数,甚至不知道的JavaScript!
  • 效率:由于功能分解,这意味着每行代码仅被调用,如果100%的必要

除了JavaScript中,我除了现有的ID添加类。 例如: id="box1" class="box"

请享用 :)



Answer 3:

嗯,我想只是为所有的div的一类。 而不是调用每一个与#ID的



文章来源: jQuery fade out elements as they scroll off page, fade back as they scroll back on