你已经激发了我的好奇心,所以我只需要看看是否有可能:)
尝试这个:
$(".cube").bind('transitionend', function() {
// Reversing the animation flag for the mouse-leave
if ($(this).data("animating")) {
$(this).data("animating", false);
} else {
$(this).data("animating", true);
}
});
$('.cube').mouseenter(function(event){
$(this).data('animating', true);
$(this).toggleClass('show-back',true);
});
$('.cube').mouseleave(function(event){
$that = $(this);
if ($that.data("animating")) {
setTimeout(function () {
$that.toggleClass('show-back',false);
}, 1000);
} else {
$that.toggleClass('show-back',false);
}
});
JSFiddle
这里的技巧有两个方面:
- 首先,您需要确保您有办法知道动画是否正在进行(因此上面的示例绑定在 transitionend 上)。
- 然后你必须知道这个过渡结束也会在动画回来时触发,因此我们切换了动画标志。
然后在鼠标离开事件(设置动画标志时)上添加 1 秒延迟,以确保动画在反转之前已经完成。
这是一个粗略的解决方案,但它应该足以让你继续前进。
编辑:
上面的代码反转了动画,但没有继续它 - 这是你需要在同一方向继续的内容。注意:它有点 hacky,只在 Chrome 中测试过。
JavaScript
$(".cube").bind('transitionend', function() {
// Reversing the animation flag for the mouse-leave
if ($(this).data("animating")) {
$(this).data("animating", false);
} else {
$(this).data("animating", true);
}
});
$('.cube').mouseenter(function(event){
$(this).data('animating', true);
$(this).toggleClass('show-back',true);
});
$('.cube').mouseleave(function(event){
$that = $(this);
if ($that.data("animating")) {
setTimeout(function () {
$that.toggleClass('show-back',false);
$that.toggleClass('show-back-again',true);
setTimeout(function () {
$that.toggleClass('show-back-again',false);
}, 50);
}, 1000);
} else {
$that.toggleClass('show-back',false);
$that.toggleClass('show-back-again',true);
setTimeout(function () {
$that.toggleClass('show-back-again',false);
}, 50);
}
});
CSS
#cube.show-back-again {
-webkit-transform: translateZ( -100px ) rotateY( -360deg );
-moz-transform: translateZ( -100px ) rotateY( -360deg );
-o-transform: translateZ( -100px ) rotateY( -360deg );
transform: translateZ( -100px ) rotateY( -360deg );
}
更新了 JSFiddle