Javascript 带有sprite的jQuery精灵
在一个问题上纠缠了整整两天之后,我终于找到了一种更简单的方法,可以从多个帧制作动画。。。它叫Javascript 带有sprite的jQuery精灵,javascript,jquery,css,animation,spritely,Javascript,Jquery,Css,Animation,Spritely,在一个问题上纠缠了整整两天之后,我终于找到了一种更简单的方法,可以从多个帧制作动画。。。它叫 鼠标悬停时,它将启动动画 鼠标移出时,它将回放动画 问题 如果在动画结束之前将鼠标移出,或在回放结束之前将鼠标移到上方,则会导致鼠标移动过远并失去同步 我想做什么 在mouseout上,仅倒带到第1帧并停止 在鼠标悬停时,只播放到最后一帧,然后停止播放 如果我(在动画过程中)在第x帧处鼠标移出,我希望它从第x帧倒回第1帧 如果我将鼠标移到第x帧(在回放期间),我希望它从第x帧播放到最后一帧 提前
- 鼠标悬停时,它将启动动画
- 鼠标移出时,它将回放动画
- 在mouseout上,仅倒带到第1帧并停止李>
- 在鼠标悬停时,只播放到最后一帧,然后停止播放李>
- 如果我(在动画过程中)在第x帧处鼠标移出,我希望它从第x帧倒回第1帧李>
- 如果我将鼠标移到第x帧(在回放期间),我希望它从第x帧播放到最后一帧
提前谢谢 如果我对你的理解正确,那么你想要的是类似的东西。注意:在
play\u 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;
})()
});
});
如果我对你的理解是正确的,那么你就会想要类似的东西。注意:在
play\u 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;
})()
});
});