使挥杆(或反弹)效果减慢

时间:2012-11-08 18:11:55

标签: jquery css3 css-animations

我想这适用于摆动或弹跳。有关如何在此another post中发布此对象的示例的示例: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)?
}

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

1 个答案:

答案 0 :(得分: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;
}

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