jQuery在页面滚动时淡出元素,在向后滚动时淡出

时间:2013-04-09 05:45:17

标签: jquery scroll fadein fadeout

我希望元素在页面顶部滚动时淡出,然后在向后滚动到页面时淡入。我写了一些有用的代码,但我正在寻找更优雅的解决方案。这是我在jsfiddle上工作的解决方案:http://jsfiddle.net/wmmead/JdbhV/3/

我想找一个更短,更优雅的代码,但是不能完全解决它。也许有一个数组和each()方法?如果我在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);
}
});

3 个答案:

答案 0 :(得分:9)

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

$(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

答案 1 :(得分:1)

This version of your jsfiddle is considered better for several reasons

  • 功能分解良好(分解为小功能):为您和其他程序员提供更高的可读性,如果您需要更改某些内容,将来更容易维护。
  • 灵活性:您可以更改框数,甚至不知道javascript!
  • 效率:由于功能分解,这意味着只有100%必要时才会调用每行代码

除了javascript之外,我还添加了除现有id之外的类。例如:id="box1" class="box"

享受:)

答案 2 :(得分:0)

好吧,我想只为你所有的div设置一个类。而不是用#id

调用每一个