css3动画只发生过一次

时间:2010-06-19 02:33:20

标签: javascript html animation css3

每次点击它时,我都试图通过javascript / css3旋转一个框。它有效,但只是我第一次点击它。每次之后,我都会收到警报,这意味着它不是javascript错误 - 但没有动画。

这是我的简单页面 -

<script>
  function rotate( box )
  {
    alert('start');
    box.style.webkitTransform = 'rotate(360deg)';
  }
</script>

<style>
#box{ height:100px; width:100px; border:1px solid red; -webkit-transition: -webkit-transform 1s ease-out; }
</style>

<div id='box' onclick='rotate(this);'></div>

我认为需要在rotate()之后放置一些东西,告诉它返回到开始阶段,以便它可以再次旋转360。

2 个答案:

答案 0 :(得分:1)

我重复使用我之前制作的脚本。它现在也应该支持Mozilla。

<!-- head part -->
<script type="text/javascript">
var angle   = 0;    //Current rotation angle 
var nbSteps = 30;   //More steps is more fluid
var speed   = 1000; //Time to make one rotation (ms)
var count   = 0;    //Count the nb of movement (0..nbSteps-1)
var element = null;

/**
 * Rotate the element passed
 */
function rotate(box) {
    if(count == 0) {
        element = box;
        rotateLoop();
    }
}

/**
 * Recursive method that rotate step by step
 */
function rotateLoop() {
    angle-=360/nbSteps;

    setElementAngle(angle);
    count++;

    if(count < nbSteps) {
        setTimeout("rotateLoop()",speed/nbSteps);
    }
    else {
        count=0;
        setElementAngle(0); //Just to be sure
    }
}

/**
 * Use for the rotation
 */
function setElementAngle(angle) {
    var rotationStyle = "rotate(" + (360-angle) + "deg)";
    element.style.WebkitTransform = rotationStyle;
    element.style.MozTransform = rotationStyle;
    element.style.OTransform = rotationStyle;
}
</script>

<style>
#box{
    height:100px;
    width:100px; 
    border:1px solid red;
    }
</style>

<!-- body part -->
<div id='box' onclick="rotate(this);"></div>

答案 1 :(得分:1)

编辑:假设您希望它完全是CSS:

目前正在测试Webkit转换并且非常粗糙。特别是对于你想做的事情。由于这些是“转换”,并且样式字符串非常复杂,因此会产生令人讨厌的挑战。

最好的做法是每隔一次点击反转一次旋转:

<script>
function rotate( box )
{
  box.style.webkitTransform = box.style.webkitTransform == "rotate(360deg)" ? "rotate(0deg)" : "rotate(360deg)";
}
</script>

<style>
#box{ height:100px; width:100px; border:1px solid red; -webkit-transition: -webkit-transform 1s ease-out; }
</style>

<div id='box' onclick='rotate(this);'></div>

或者你必须处理很多危险的编码或javascript替代品。