fade与滚动有关的问题

时间:2013-05-30 19:14:16

标签: javascript jquery fadein scrolltop

我正在尝试让我的内容在到达页面各个末端的某个距离时淡入。当触发器设置在最顶部和底部时,淡入淡出效果很好但是当我设置距离(200px)时,淡入淡出不再起作用,内容就会出现。

$(window).scroll(function(){
        if($(window).scrollTop()<=200){
            $('#about .content').stop(true,true).fadeIn("5s");
        } 
        else {
            $('#about .content').stop(true,true).fadeOut("10s");
        }

     if ($(window).scrollTop() + $(window).height() >= $(document).height() - 200) {
            $('#work .content').stop(true,true).fadeIn("5s");
        } else {
            $('#work .content').stop(true,true).fadeOut("5s");
        }
    });

1 个答案:

答案 0 :(得分:1)

发生的事情是你有两个相互作用的功能:

第一个函数有一个“if-else”语句和第二个函数。 这意味着每个函数都会在每次滚动时执行某些操作。 有多种方法可以解决这个问题。

我解决它的方法是使用变量并更新约束。

假设我们有一个变量onScreen,如果段落在屏幕上则值为1,如果不是则值为0:

例如:

<div style="height: 800px">Example of scroll with fadeIn, fadeOut.

<p style="margin-top:300px;">These paragraphs will go away when you have scrolled
 more than 10 pixels from the top. They will appear again when you have scrolled 
to a proximity of 50 pixels from the bottom. They will also appear if you go 
within a proximity of 10 pixels of the top again.</p>

</div>

现在为jQuery代码:

var $onScreen = 1;

$(window).scroll(function(){
if($(window).scrollTop() < 10){
      if ($onScreen == 0)
      {
        $("p:first").stop(true,true).fadeIn("slow", "linear");
        $onScreen = 1;  
      }
    }   

if($(window).scrollTop() <= 20 && $(window).scrollTop() >= 10){
      if ($onScreen == 1)
      {
        $("p:first").stop(true,true).fadeOut("slow", "linear");
        $onScreen = 0;  
      }
    } 

 if ($(window).scrollTop() + $(window).height() >= $(document).height() - 50) {
     if ($onScreen == 0)
     {
         $("p:first").stop(true,true).fadeIn("slow", "linear");
         $onScreen = 1;
     }
    }
 });

现在这不是最简洁的方式,我并不是故意这样做:通过使代码更广泛,我希望你能够遵循它为什么现在有效并且之前没有工作(这样的话)你实际上是从中学习的。)

我在小提琴上为你准备了一个实例:http://jsfiddle.net/ycCAb/4/

我希望这能回答你的问题。祝你好运!