【问题标题】:Fade background color change animation lags and slows down淡化背景颜色变化动画滞后并变慢
【发布时间】:2013-07-28 18:52:08
【问题描述】:

我正在尝试通过 javascript 交叉淡入淡出更改背景颜色和一系列图像。在前 3-4 个循环中,两者都是同步的(每种颜色在 2 秒内,每个图像在 2 秒内),但经过一段时间后,背景颜色的变化会变慢并滞后。我希望这两个元素同时改变。请帮忙。 FIDDLE- jsfiddle.net/pEHZR

$(function () {
var colors = ['black', 'red', 'blue', 'black'];
var i = 0;
var cont = $('div.container');
var back = $('div.back');
back.css('opacity', 1);
back.css('backgroundColor', colors[0]);
cont.css('backgroundColor', colors[1]);

window.onload = function start() {
    setInterval(function () {
        anim();
    }, 2000);
}

function anim() {
    if (i == colors.length - 1) {
        i = 0;
        return;
    }
    back.css({
        backgroundColor: colors[i],
        opacity: 1
    });
    cont.css({
        backgroundColor: colors[i + 1]
    });
    i++;
    back.stop().animate({
        opacity: 0
    }, 2000, anim);
}
});

$(function () {
$('.fadein img:gt(0)').hide();
setInterval(function () {
    $('.fadein :first-child').fadeOut().next('img').fadeIn().end().appendTo('.fadein');
}, 2000);
});

【问题讨论】:

    标签: javascript css html background-color fade


    【解决方案1】:

    删除了 setInterval 函数并将所有代码放在一个地方,所以现在动画和文本同步了:

    HTML:

    <div class="container">
        <div class="back"></div>
        <div class="main"></div>
    </div>
    

    CSS:

    .container {
        position:absolute;
        top:0px;
        left:50%;
        margin-left:-75px;
        width:130px;
        height:130px;
        border:10px solid yellow;
    }
    .back {
        position:absolute;
        top:0;
        left:0;
        width:100%;
        height:100%;
    }
    .main {
        position:relative;
        text-align:center;
        color:white;
        background-color:transparent;
    }
    

    JS:

    $(function () {
        var colors = ['black', 'red', 'blue', 'green', 'black'];
        var i = 0;
        var cont = $('div.container');
        var back = $('div.back');
        var main = $('div.main');
        back.css('opacity', 1);
        back.css('backgroundColor', colors[0]); // start color , fades out
        cont.css('backgroundColor', colors[1]); // target color
        anim();
    
        function anim() {
            if (i == colors.length - 1) {
                i=0;
                //return; // repeat ad infinitum
            }
            main.text(colors[i+1]);
            var top = (cont.height() - main.height())/2 |0;
            main.css('top', top + 'px'); //center text vertically
            back.css({
                backgroundColor: colors[i],
                opacity: 1
            });
            cont.css({
                backgroundColor: colors[i+1]
            });
            i++;
            back.stop().animate({
                opacity: 0
            }, 2000, anim);
        }
    });
    

    http://jsfiddle.net/TytSZ/10/
    http://jsfiddle.net/TytSZ/12/(使用透明 .png 图像修改算法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多