javascript - 淡化背景颜色变化动画滞后并减慢

标签 javascript css html background-color fade

我正在尝试通过 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);
});

最佳答案

删除了 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 图像的修改算法)

关于javascript - 淡化背景颜色变化动画滞后并减慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17916298/

相关文章:

javascript - 在 AngularJS 中动态注册过滤器?

javascript - 在 jQuery 中使用箭头键的音频 slider

html - 具有固定背景的 Div 部分未在 Firefox 中显示

javascript - EXTJS——具有相同处理程序的多个 btns。如何在单击 btn 时添加 cls,然后在单击另一个 btn 时删除?

javascript - 使用 FFMPEG 的 ASP.NET Core 5.0 MVC HLS 转码

html - Chrome 输入类型文件宽度(点击区域)

jquery - 如何防止(引导)固定顶部导航在移动设备上缩放

javascript - getelementbyid 不工作

javascript - jquery 中未选择第二个 div 元素

Javascript/jQuery 按键记录