在坚持一个问题的两天后,我终于找到了一种从几个帧制作动画的更简单方法......它被称为Spritely。
var play_frames = 23;
$('#door_hov').hover(
function() {
$('#door').sprite({
fps: 24,
no_of_frames: 23,
play_frames: play_frames
});
play_frames = 22;
},
function() {
$('#door').sprite({
fps: 24,
no_of_frames: 23,
play_frames: 22,
rewind: true
});
}
);
鼠标悬停时,它会启动动画。
当您使用鼠标输出时,它会倒回动画。
如果你在动画结束前使用mouseout,或者在倒带完成之前将鼠标悬停,那么它会变得太远并且不同步。
提前致谢!
答案 0 :(得分:1)
如果我理解你的话,那么你需要像this这样的东西。注意:在play_frames
的帮助下,您可以更多地缩短代码。
var iFrames = 23,
iFps = 24,
bRewind = false,
iStartFrame = -1,
bAnimating = false,
stopAndRewind = function(oAnim) {
iStartFrame = ~iStartFrame ? -1 : iFrames - 2;
bRewind = !bRewind;
bAnimating = false;
oAnim.spStop();
};
$("#door").on("mouseenter mouseleave", function() {
var iCurFrame = iStartFrame;
if ($._spritely.instances && $._spritely.instances[$(this).prop("id")])
{
if (bAnimating)
{
iCurFrame = $(this).spGet("current_frame");
stopAndRewind($(this));
}
$(this).destroy();
}
bAnimating = true;
$(this).sprite({
fps: iFps,
no_of_frames: iFrames,
start_at_frame: iCurFrame,
rewind: bRewind,
on_frame: (function() {
var o = {},
i = 1;
if (!bRewind)
{
i = iFrames - 2;
}
o[i] = stopAndRewind;
return o;
})()
});
});