小球碰到一面壁之後一般都會反彈,反射角=入射角; 其實用css3來實現這個效果也非常簡單。 首先,分解一下小球的運動:水平運動和垂直運動。 當小球往右下方向運動時,如果碰到了下麵的壁,那麼由於碰撞,小球受到了垂直於牆壁的力(即向上的力),這樣的話水平運動是不會受到影響的,只有垂直運動受到了影響。所以 ...
小球碰到一面壁之後一般都會反彈,反射角=入射角;
其實用css3來實現這個效果也非常簡單。
首先,分解一下小球的運動:水平運動和垂直運動。
當小球往右下方向運動時,如果碰到了下麵的壁,那麼由於碰撞,小球受到了垂直於牆壁的力(即向上的力),這樣的話水平運動是不會受到影響的,只有垂直運動受到了影響。所以在與上下壁碰撞時只需改變上下運動的方向,左右運動不變;以此類推,當小球與左右壁相碰撞時,只需改變水平運動的方向,垂直方向無需改動。
有了這個思路,就可以開始用css3動畫來實現這個小球碰撞時反彈了。
1.html:
1 <div id="box"> 2 <div id="ball-box"> 3 <div id="ball"></div> 4 </div> 5 </div>
2.css:
1 #box { 2 width: 300px; 3 height: 150px; 4 border: 1px solid #7aa4c0; 5 } 6 #ball-box { 7 width: 20px; 8 height: 20px; 9 border-radius: 10px; 10 animation: bouncey linear 3s infinite; 11 -webkit-animation: bouncey linear 3s infinite; 12 } 13 #ball { 14 width: 20px; 15 height: 20px; 16 border-radius: 10px; 17 background: -webkit-radial-gradient(circle, #ddecee, #0377db); 18 background: -o-radial-gradient(circle, #ddecee, #0377db); 19 background: -moz-radial-gradient(circle, #ddecee, #0377db); 20 background: radial-gradient(circle, #ddecee, #0377db); 21 animation: bouncex linear 5s infinite; 22 -webkit-animation: bouncex linear 3s infinite; 23 } 24 @keyframes bouncey 25 { 26 0%,100% { 27 transform:translateY(0px); 28 -webkit-transform:translateY(0px); 29 } 30 50% { 31 transform:translateY(130px); 32 -webkit-transform:translateY(130px); 33 } 34 } 35 @keyframes bouncex 36 { 37 0%,100% { 38 transform:translateX(0px); 39 -webkit-transform:translateX(0px); 40 } 41 50% { 42 transform:translateX(280px); 43 -webkit-transform:translateX(280px); 44 } 45 }css Code
小球的顏色利用css3裡面的徑向漸變,使小球看起來更加具有立體視覺感受。
好啦,大功告成= =