平滑的css改变过渡

use*_*796 3 html javascript css jquery css3

我设置了一个jQuery函数,当某个div进入视图时会改变身体背景颜色,例如,身体背景颜色为黑色,当#block-three(包含黑色文本)时,身体背景颜色变为白色,并在此时更改回来走出视野.这很好用,但它非常突然,我正在寻找背景颜色之间更平滑的过渡,滚动时颜色之间的渐变(如果可能的话).
jsFiddle演示:http ://jsfiddle.net/neal_fletcher/TB53d/

HTML:

<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>
Run Code Online (Sandbox Code Playgroud)

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()
});
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激!

Dan*_*niP 12

你可以使用transitionCSS:

body {
    background-color: black;
    transition:all 1s;
}
Run Code Online (Sandbox Code Playgroud)

演示小提琴

  • 喜欢CSS`过渡`,因为它非常高效和CPU友好.CSS`transition`和jQuery`animate()`之间的区别就像是"你能顺利地改变它"和"抓住你 - 现在改变颜色 - 现在!"之间的区别. ..如果你抓住我的漂移.也就是说,如果您知道要设置动画的属性,请选择`transition:background-color 1s;`. (5认同)