2014-01-29 255 views
2

我已經設置了一個jQuery函數,可以在某個div進入視圖時更改主體背景顏色,例如,身體背景顏色爲黑色,當#block-three(包含黑色文本)時,身體背景顏色會變爲白色,並在視線不正常時變回。這工作正常,但它只是非常突然,我正在尋找背景顏色之間更平滑的過渡,在滾動時顏色之間淡化(如果可能)。
的jsfiddle演示:http://jsfiddle.net/neal_fletcher/TB53d/

HTML:平滑的CSS更改轉換

<div id="block-one" class="block"> 
    <div class="inner-block">Test</div> 
    <div class="inner-block"></div> 
    <div class="inner-block"></div> 
</div> 
<div id="block-two" class="block"> 
    <div class="inner-block">Test</div> 
</div> 
<div id="block-three" class="block"> 
    <div class="inner-block">Test</div> 
    <div class="inner-block"></div> 
</div> 
<div id="block-four" class="block"> 
    <div class="inner-block">Test</div> 
    <div class="inner-block"></div> 
    <div class="inner-block"></div> 
</div> 
<div id="block-five" class="block"> 
    <div class="inner-block">Test</div> 
    <div class="inner-block"></div> 
    <div class="inner-block"></div> 
</div> 

的jQuery:

var blockHeight = []; 
$(".block").each(function() { 
    blockHeight.push($(this).height()); 
}); 

function hoverCurrentItem() { 
    var sIndex = 0; 
    var totalHeight = 0; 
    var scrolled = $(window).scrollTop(); 
    for (var i in blockHeight) { 
     totalHeight += blockHeight[i]; 
     if (totalHeight > scrolled) { 
      break; 
     } else { 
      sIndex++; 
     } 
    } 

    var $sItem = $(".block").eq(sIndex); 
    if (!$sItem.hasClass("selected")) { 
     $(".selected").removeClass("selected"); 
     $sItem.addClass("selected"); 
    } 
    if ($("#block-three").hasClass("selected")) { 
     $("body").css("background-color", "white"); 
    } else { 
     $("body").css("background-color", "black"); 
    } 
} 
hoverCurrentItem(); 

$(window).scroll(function (e) { 
    hoverCurrentItem() 
}); 

任何建議,將不勝感激!

回答

11

你可以使用transition與CSS:

body { 
    background-color: black; 
    transition:all 1s; 
} 

Demo Fiddle

+5

身高CSS'transition',因爲它是非常更有效率和CPU友好。 CSS'transition'和jQuery' animate()'之間的區別就像「你會不會順利地改變它」和「GRAGH YOU ---- ING MORON改變顏色 - 現在就是!」之間的區別。 ..如果你趕上我的漂移。也就是說,更喜歡'transition:background-color 1s';如果你知道你想要動畫的屬性。 –

+0

這非常好知道,謝謝! – elefun