我想这适用于摆动或弹跳。有关如何在此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)?
}
我不知道通过脚本更改动画属性的最佳方法。特别是在动画中间更改持续时间时,我不确定是否可行。感谢。
答案 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;
}
您可以通过将ang
和dir
的初始值设为负值来切换初始方向。您可以通过增加dAng
的值来更快地“摆动”,但它应该是ang
的一个因素。