从中断的地方重启CSS3动画?

时间:2012-01-01 06:09:29

标签: javascript html5 css3 webkit css-animations

我希望创建一个动画,每按一次按钮,对象就会向右移动一定量。

例如,如果对象的初始位置是“left:10px”并且每1个动画循环移动它说10px,那么在第一次单击后它应该是20px,在第二次单击后它应该是30px所以上。

我应该怎么做呢?现在,CSS动画似乎在每次点击时从对象的初始位置重新开始。

2 个答案:

答案 0 :(得分:2)

我认为这是不可能的,至少你做不到这样的事情:

@-webkit-keyframes move{
  0% {}
100% {
     -webkit-transform: translate(10px);
     }  
}

   This will not work at all.

但是,您可以使用jQuery代替。您可以使用very few lines

轻松创建动画
$('#button').click(function() {
    $('#book').animate({
        left: '+=10'
    }, 1000, function() {
        console.log("Done.");
    });
});

现场演示: here

希望这会帮助你。


ADDED

因此您需要将CSS3用于动画部分。您可以在CSS中使用transition,如下所示:

-webkit-transition:left .3s ease-in-out;

并使用JavaScript更改其left(动画部分中涉及的JavaScript不是 )。

现场演示(新) here

答案 1 :(得分:1)

这是一个非jQuery版本,用CSS做动画。设置left然后transition: left控制动画需要Javascript。

演示:http://jsfiddle.net/ThinkingStiff/UEt4Y/

脚本:

document.getElementById( 'move-me' ).addEventListener( 'click', function () {

    var move = document.getElementById( 'move' );
    move.style.left = ( move.offsetLeft + 10 ) + 'px';

}, false );

HTML:

<button id="move-me">Move</button>
<div id="move"></div>

CSS:

#move {
    background: green;
    height: 50px;
    left: 0px;
    position: absolute;
    top: 100px;
    transition:             left 250ms ease-in-out;
        -moz-transition:    left 250ms ease-in-out;
        -ms-transition:     left 250ms ease-in-out;
        -o-transition:      left 250ms ease-in-out;
        -webkit-transition: left 250ms ease-in-out;
    width: 50px;
}