Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在特定时间段内使用JavaScript更改HTML元素的背景颜色?_Javascript_Html_Css_Animation_Timer - Fatal编程技术网

在特定时间段内使用JavaScript更改HTML元素的背景颜色?

在特定时间段内使用JavaScript更改HTML元素的背景颜色?,javascript,html,css,animation,timer,Javascript,Html,Css,Animation,Timer,我有大约26个html元素,我希望在JavaScript中实现以下效果: 有可能做出这样的东西吗 我试着按如下方式做: var j = 2000; for (i = 1; i <= 26; i++) { setInterval(function() {document.getElementById('Q' + i).style.backgroundColor = '#00a300'}, j); setInterval(fun

我有大约26个html元素,我希望在JavaScript中实现以下效果:

有可能做出这样的东西吗

我试着按如下方式做:

var j = 2000;
        for (i = 1; i <= 26; i++) {
            setInterval(function() {document.getElementById('Q' + i).style.backgroundColor = '#00a300'}, j);
            setInterval(function() {document.getElementById('Q' + i).style.color = '#FFFFFF'}, j);
            j = j + j;
            setInterval(function() {document.getElementById('Q' + (i-1)).style.backgroundColor = '#e1e1e1'}, j);
            setInterval(function() {document.getElementById('Q' + (i-1)).style.color = '#666666'}, j);
        }
var j=2000;
对于(i=1;i)
div{
显示:块;
背景:黑色;
宽度:200px;
高度:40px;
保证金:2px0px 0px 0px;
}
html
。。。。
js
函数animateStuff(doelements、baseColor、activeColor、delay){
var计数=0;
var animationRun=1;
var帧=0;
函数框架(){
frames++;
如果((帧百分比延迟)==1){//设置延迟仅在设置延迟已过的循环上设置动画。
计数++;
如果(计数>=DomeElements.length){
count=0;//返回循环的开头。
}
//把所有的桌子都弄黑

对于(var x=0;x,我使用jQuery.animate函数和jQuery颜色插件构建了一个小提琴示例,用于创建背景颜色的淡入淡出动画

请在这里找到小提琴:

请注意,JSFIDLE的左侧面板中使用了一个外部资源……它指向其CDN的jQuery颜色插件

脚本如下所示:

    function animate(idx) {
        $($('.block')[idx]).animate({ backgroundColor: "#ff0000" }, 200, function () {
            var idx2 = idx;
            $($('.block')[idx2]).animate({ backgroundColor: "#ffffff" }, 200, function () {});
            if (idx >= $('.block').length - 1) {
                setTimeout(animate(0), 200);
            } else setTimeout(animate(idx + 1), 200);
        });
    }

    $(document).ready(function () {
        animate(0);
    });

我相信你的答案是正确的,但在我的例子中,我正在测试的3个浏览器(即Firefox、Chrome)出现了错误,Firefox中出现了错误
太多的递归
,Chrome和IE ir都给了我
超过的最大调用堆栈大小
我认为我有太多dom元素…Window.requestAnimationFrame()传递要由系统硬件渲染的函数。这使操作系统能够处理循环,并且仍然为系统上的其他应用程序提供时间。只要animationRun==true,它就会运行循环。只有在不使用window.requestAnimationFrame()的情况下,它才会提供有关执行时间的错误。如果您想要更详细的动画示例,请查看我在示例中提供的链接上的源代码。setTimeout()不应再用于动画所有未来的动画都应使用window.requestAnimationFrame()当它将动画循环传递到系统操作系统时,允许操作系统正确处理循环并仍然管理系统的正常操作。setTimeout()出错,最终会出现错误“递归过多”和“超出最大调用堆栈大小”。不要使用setTimeout()进行动画循环。我已经更新了我的示例,显示它正在html页面上使用,以便您可以看到它正在工作。您所犯的错误是由于我在键入它时的一个小错误造成的。您将看到此示例工作得最好,并且是正确的答案。