jquery添加选择器并淡入,但淡出整个标题

问题描述:

基本上,我有我的标题导航,我想淡入,一旦用户向下滚动过某个点。这是一个快速的fiddlejquery添加选择器并淡入,但淡出整个标题

$(window).scroll(function() { 
    if ($(document).scrollTop() > 150) { 
     $('#main').addClass('appear'); 
     $('#main').fadeIn(1000); 
    } else { 
     $('#main').removeClass('appear'); 
     $('#main').fadeOut(1000); 
    } 
}); 

我遇到的问题是

  1. 它的淡出,即使我改变淡出使用出现代替了原来的标题。
  2. 一旦动画完成并且淡化风格display:none被添加并且内容跳转。
+0

使用'$( '#主'),动画({ '不透明':0})。'代替淡入淡出,反之亦然,这将解决显示:没有问题 –

+0

感谢您的评论。当我补充说,就好像没有淡入或淡出功能,因为我有它的位置:无论如何固定。我真的不明白为什么这不起作用。 – atlas24

+0

如果您在fadeOut完成移除课程时使用回调,这将解决内容跳跃的问题。即'$('#main')。fadeout(1000,function(){ $('#main')。removeClass('appear'); });' – Valeklosse

下面是一个示例代码段该做的工作

$(window).scroll(function() { 
 
/*added one more condition(hasClass) because once document scrollTop > 150 this condition will be success again and again but at first we add fixed class so checking this this will avoid this problem*/ 
 
if ($(document).scrollTop() > 150 && !$('header').hasClass('fixed')) 
 
{ \t 
 
/*here stop will stop any on going animation 
 
first set oppacity to 0 (.css('opa...)) then add fixed class and start animation from 0 to 1 
 
*/ \t  $('header').stop().css('opacity',0).addClass('fixed').animate({opacity:1}); 
 
} 
 
/*when document scrolled back to top (<150) and have the fixed class we added earlier an aditional condition which checks if an animation is not ongoing*/ 
 
if ($(document).scrollTop() < 150 && $('header').hasClass('fixed') && !$('header').is(':animated')) 
 
{ 
 
/*animate opacity to 0, in the animation complete callback set the opacity to 1 and remove fixed class this will make the beg header to appear again when scrolled to top*/ 
 
    $('header').stop().animate({opacity:0},function(){ 
 
    $(this).css('opacity','1').removeClass('fixed'); 
 
    }); 
 
} 
 

 
});
header { 
 
    text-align: center; 
 
    font-size: 25px; 
 
    font-weight: bold; 
 
    background-color: #d6e0ae; 
 
    padding: 20px 0; 
 
} 
 
header.fixed { 
 
    position: fixed; 
 
    width: 100%; 
 
    top: 0; 
 
    animation-name: fadeIn; 
 
    animation-duration: 1s; 
 
    padding: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<header> 
 
\t Header of this page 
 
</header> 
 

 
<div>Blank contents to make a big scroll </div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div><div>Test</div>

+0

我只想用jQuery来做到这一点,因为这是我自己制作的第一个片段。我确信只是缺少一些东西让头重新出现,我将不得不四处寻找解决办法。谢谢你的帮助。 – atlas24

+0

好吧,我删除了css动画并添加了jquery动画,请查看编辑后的答案 –

+0

如何才能用我的代码实现相同的效果?请我试着了解我特意做错了什么,为什么它没有工作,所以我可以学习。 – atlas24