0

我想这适用于摆动或弹跳。关于如何在另一篇文章中使对象摆动的示例,此代码已发布:http: //jsfiddle.net/gVCWE/149/

你如何让摆动减速停止?

.box{
    width:50px; height:50px;
    background: yellow;
    border: 1px solid black;
    margin:100px;
    position: relative;
    float: left;
    -moz-animation: 3s ease 0s normal none infinite swing;
    -moz-transform-origin: center top;
    -webkit-animation:swing 3s infinite ease-in-out;
    -webkit-transform-origin:top;
}

@-moz-keyframes swing{
    0%{-moz-transform:rotate(-3deg)}
    50%{-moz-transform:rotate(3deg)}
    100%{-moz-transform:rotate(-3deg)}
}
@-webkit-keyframes swing{
    0%{-webkit-transform:rotate(-3deg)}
    50%{-webkit-transform:rotate(3deg)}
    100%{-webkit-transform:rotate(-3deg)}
}

我也想做其他的“惯性效应”。如果有必要,我不介意使用 JavaScript 或 JQuery。我觉得单独的 CSS 或关键帧不足以完成我想做的事情。

我可以使用 setInterval 并执行以下操作:

function prepareAnimation()
{
    setInterval(slowAnimation, 200)
}

function slowAnimation()
{
    speed=$(".box").getSpeed(); // how would I write getSpeed?
    if(speed<=0) return;
    speed = speed - .1;
    $(".box").setSpeed(speed); // how would I write setSpeed (degree would be set in here too)?
}

我不知道通过脚本更改动画属性的最佳方法。尤其是在动画中间更改持续时间时,我完全不确定这是否可行。谢谢。

4

1 回答 1

3

http://jsfiddle.net/gVCWE/150/

(function swing() {
    var ang  = 20,
        dAng = 1,
        dir  = 1,
        box = document.getElementById("box");

    (function setAng(ang){
        box.style.WebkitTransform =  'rotate('+ang+'deg)';
        box.style.MozTransform =  'rotate('+ang+'deg)';
        dir = -dir;
        if (Math.abs(ang) > 0)
            setTimeout(setAng, 1000, dir * (Math.abs(ang)-dAng));
    })(ang);
})();​

CSS

.box{
    width:50px; height:150px;
    background: yellow;
    border: 1px solid black;
    margin:100px;
    position: relative;
    float: left;
    -moz-transition:-moz-transform 1s ease-in-out;
    -moz-transform-origin: center top;
    -webkit-transition:-webkit-transform 1s ease-in-out;
    -webkit-transform-origin:top;
}

ang您可以通过将和的初始值dir设为负来切换初始方向。您可以通过增加 的值来使“摆动”变慢得更快dAng,但它应该是 的一个因素ang

于 2012-11-08T18:25:43.277 回答