2013-03-06 9 views
1

У меня есть заголовок фиксированной позиции на моем веб-сайте, который имеет альфа-прозрачность, когда он находится в верхней части страницы. Когда пользователь прокручивает верхнюю часть страницы, он оживляет сплошной цвет. Однако, когда пользователь прокручивается назад к верхней части страницы, я хочу, чтобы цвет возвращался к альфа-прозрачности. К сожалению, из того, что я читал, цветные анимации JQuery не поддерживают значения RGBA. У меня меняется цвет, когда пользователь прокручивается вниз, однако я не могу заставить его менять цвет, когда он находится назад в верхней части страницы.JQuery Scroll Animate Color

<script type="text/javascript"> 
    $(window).scroll(function() { 
     $("#header").css("position", "fixed"); 
     if ($(window).scrollTop() > 0) { 
      $("header").animate({backgroundColor:'#2b2b2b'}, 'slow'); 
     } 
     if ($(window).scrollTop() <= 0) { 
      $("header").animate({backgroundColor: '#000000'}, 'slow'); 
     } 
    }); 
</script> 

Любые идеи о том, как это сделать?

+1

Вы уверены, что это '$ ("заголовок")', а не '$ ("# заголовок")'? –

+0

Да У меня есть заголовок HTML5, помеченный внутри div с идентификатором #header, это запутанно. – bdjett

+0

На самом деле анимация jQuery не поддерживает анимированный фоновый цвет (см. Мои комментарии к ответу roXor). Вам нужна дополнительная библиотека для анимации цвета фона. – Shauna

ответ

1

Использование CSS3 transition с JQuery:

Вы можете добавить переход CSS3 к header в пользовательский класс, где вы можете установить желаемый цвет.
чем с JQuery вы просто добавить/удалить этот класс:

LIVE DEMO

$(window).scroll(function() { 
    var addRemClass = $(window).scrollTop() > 0 ? 'addClass' : 'removeClass'; 
    $("header")[addRemClass]('bgChange'); 
}); 

CSS:

header{ 
    background:#000; 
    padding:20px; 
    color:#fff; 
    width:100%; 
    transition:0.8s; /* Our nice transition (you can also use 'ms' values) */ 
} 

header.bgChange{ 
    background:#2b2b2b;/* I used #f00 in the demo to make it more obvious :) */ 
} 

Решение, которое использует JQuery UI: Для поддержки более браузеров нравится:

LIVE DEMO

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> 
<script> 
    $(window).scroll(function() { 
     $("header").stop().animate({ 
      backgroundColor: $(window).scrollTop() > 0 ? '#2b2b2b' : '#000' 
     }, 800); 
    }); 
</script> 
+0

Я не могу использовать fadeTo(), потому что я не хочу, чтобы текст в заголовке был поблек. – bdjett

+0

@ bjett92 отредактировал мой ответ –

+0

Примечание - jQuery не поддерживает анимирование цвета фона по умолчанию. Вам нужна дополнительная библиотека (jUI или плагин Color), чтобы сделать это только с помощью jQuery (и без CSS3, у которого есть несколько отверстий в поддержке), если вы хотите пойти по этому маршруту. http://stackoverflow.com/questions/190560/jquery-animate-backgroundcolor – Shauna