Javascript 求助,尝试同时为两个不同的精灵制作动画

Javascript help, Trying to animate two different sprites at same time

我需要一些 javascript 帮助。我正在尝试在两个单独的 div 中设置两个具有不同帧速率的精灵动画。

这是一个 fiddle 我开始了,但我被困住了。

如何将两个 div ID 合并到一个语句中?或者我是否应该在 div 的 运行 语句中使用 ClassName?

http://jsfiddle.net/akwilinski/3t7d6qbL/1/

<div id="animate" class="animation"></div>
<div id="animate2" class="animation2"></div>

onload = function startAnimation() { 
    var frameHeight = 400; 
    var frames = 27; 
    var frame = 0; 
    var div = document.getElementById("animate"); 
    setInterval(function () { 
        var frameOffset = (++frame % frames) * -frameHeight; 
        div.style.backgroundPosition = "0px " + frameOffset + "px"; 
    }, 100); 

}   

感谢您的帮助!

你可以这样做:

var div = document.getElementById("animate"); 
var div2 = document.getElementById("animate2");

function anim(div) {
    setInterval(function () { 
        var frameOffset = (++frame % frames) * -frameHeight; 
        div.style.backgroundPosition = "0px " + frameOffset + "px"; 
    }, 100); 
}

anim(div);
anim(div2);

然后您可以传入其他参数,例如 frameHeight、frame 和 frames 以进一步自定义每个动画。

http://jsfiddle.net/f4v1vy7x/5/

我制作了一个 Can 对象来存储每个罐头的配置(这样你就可以有不同的 frameHeights、frames 和 frameRates。

我使用 window.requestAnimationFrame 因为它比 setInterval 更有效。在每个可用帧上,我检查是否是时候根据每个 Can 的设置帧速率设置动画:

var Can = function( selector, frameHeight, frames, frameRate )
{
    this.domCan = document.getElementById( selector );
    this.frameHeight = frameHeight;
    this.frames = frames;
    this.frameRate = frameRate;
    this.frame = 0;
};

onload = function startAnimation() { 
    var can1 = new Can( 'animate', 400, 27, 20 );
    var can2 = new Can( 'animate2', 400, 27, 100 );

    var cans = [ can1, can2 ]; 

    window.requestAnimationFrame( function() {
        can1.start = can2.start = new Date();
        animate( cans );
    } );
};

var animate = function( cans ) {
    for( var i = 0; i < cans.length; i++ ) {       
        var now = new Date();
        var can = cans[i];
        if( now - can.start >= 1000 / can.frameRate ) {
            can.start = now;
            var frameOffset = (++can.frame % can.frames) * -can.frameHeight; 
            can.domCan.style.backgroundPosition = "0px " + frameOffset + "px";
        }
    }
    window.requestAnimationFrame( function() {
        animate( cans );
    } );
}

使用您已经开始使用的方法来执行此操作的最简单方法是定义 2 个新变量,1 个用于第二个 div,一个用于第二个帧计数。然后您可以将调用添加到您的函数中。

更新的 js:

onload = function startAnimation() { 
var frameHeight = 400; 
var frames = 27; 
var frame = 0; 
var div = document.getElementById("animate"); 
var div2 = document.getElementById("animate2");
setInterval(function () { 
    var frameOffset = (++frame % frames) * -frameHeight; 
    var frameOffset2 = (++frame % frames) * -frameHeight - 10; 
    div.style.backgroundPosition = "0px " + frameOffset + "px"; 
    div2.style.backgroundPosition = "0px " + frameOffset + "px"; 
}, 100);

}   

Fiddle