使用canvas實現簡單動畫
大多數 Canvas 繪圖 API 都沒有定義在 <canvas> 元素本身上,而是定義在通過畫布的 getContext()獲得的一個“繪圖環境”物件上。
實現如下星星的運動
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id='canvas' width="800px" height="500px"></canvas>
<script type="text/javascript">
var canvas = document.getElementById('canvas');
var c = canvas.getContext('2d');
c.fillStyle = 'gray';
c.fillRect(0,0,800,500)
var target=[{}];
for (var i = 0; i <= 60; i++) {
var obj = {}
obj.x = randomNum(30,770);
obj.y= randomNum(30,470);
obj.speedX = randomNum(-2,2);
obj.speedY=randomNum(-2,2);
obj.deg = randomNum(0,180)
target[i]=obj;
drawStar(c,target[i].x,target[i].y,10,5,target[i].deg);
};
setInterval(function() {
//更新畫布
c.clearRect(0,0,800,500);
c.fillStyle = 'gray';
c.fillRect(0,0,800,500)
//繪製星星
for (var i = 0; i <= 60; i++) {
target[i].x = target[i].x+target[i].speedX;
target[i].y = target[i].y+target[i].speedY;
//保證星星速度不為零
if(target[i].speedX==0){
target[i].speedX=1
}
if(target[i].speedY==0){
target[i].speedY=1
}
//星星運動到邊界後往回運動
if(target[i].x>=770){
target[i].speedX = -randomNum(1,2);
}
if(target[i].x<=30){
target[i].speedX = randomNum(1,2);
}
if(target[i].y>=470){
target[i].speedY = -randomNum(1,2);
}
if(target[i].y<=30){
target[i].speedY = randomNum(1,2);
}
drawStar(c,target[i].x,target[i].y,20,10,target[i].deg);
}
},1.7);
//取隨機數
function randomNum(min,max){
return Math.floor(Math.random()*(max-min+1)+min);
}
//畫星星
//x, y為圓心座標,R、r分別為大圓、小圓半徑,rot旋轉角度
function drawStar(cxt, x, y, r, R, rot){
cxt.beginPath();
for(var i = 0; i < 5; i ++){
cxt.lineTo( Math.cos( (18 + i*72 - rot)/180 * Math.PI) * R + x,
-Math.sin( (18 + i*72 - rot)/180 * Math.PI) * R + y)
cxt.lineTo( Math.cos( (54 + i*72 - rot)/180 * Math.PI) * r + x,
-Math.sin( (54 + i*72 - rot)/180 * Math.PI) * r + y)
}
cxt.closePath();
cxt.lineWidth = 3;
cxt.fillStyle = "#fb3";
cxt.strokeStyle = "#fb5";
cxt.lineJoin = "round";
cxt.fill();
cxt.stroke();
}
</script>
</body>
</html>
相關文章
- canvas簡單的畫布動畫 - KaiqisanCanvas動畫AI
- 用canvas實現一個簡單的畫板Canvas
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- canvas之實現控制動畫Canvas動畫
- canvas簡單畫板效果Canvas
- canvas簡單動畫案例(圓圈閃爍漸變動畫)Canvas動畫
- 前端動畫效果實現的簡單比較前端動畫
- Flutter Animation(1)動畫的簡單使用Flutter動畫
- 基於 HTML5 Canvas 實現文字動畫特效HTMLCanvas動畫特效
- 使用canvas繪製圓弧動畫Canvas動畫
- 簡單CSS實現閃爍動畫(+1白話講解)CSS動畫
- Canvas 實現畫中畫動畫效果–網易娛樂年度盤點H5動畫解密Canvas動畫H5解密
- Canvas 實現畫中畫動畫效果--網易娛樂年度盤點H5動畫解密Canvas動畫H5解密
- CSS3建立簡單的網頁動畫–實現彈跳球動CSSS3網頁動畫
- 基於 HTML5 Canvas 實現的文字動畫特效HTMLCanvas動畫特效
- canvas動畫心得Canvas動畫
- canvas水球動畫Canvas動畫
- JavaScript 簡單動畫效果JavaScript動畫
- Canvas 動畫的效能優化實踐Canvas動畫優化
- 使用CADisplayLink實現UILabel動畫特效UI動畫特效
- [譯] 使用 Swift 實現原型動畫Swift原型動畫
- 基於 HTML5 實現的簡單雲動畫和景物描述HTML動畫
- flutter 簡單實現瀏覽器H5粒子動畫Flutter瀏覽器H5動畫
- canvas簡單封裝一個echarts實現不了的餅圖Canvas封裝Echarts
- 《每週一點canvas動畫》——使用者互動Canvas動畫
- 使用 ActionScript 實現簡單滑動驗證碼識別
- Promise的使用及簡單實現Promise
- JavaScript簡單的動畫效果JavaScript動畫
- 簡單的動畫 (numpy & PySimpleGUI)動畫GUI
- 如何實現一個簡單的雨滴動畫?手把手告訴你動畫
- 智慧家居簡單實現---使用ESP8266簡單實現和APP通訊APP
- 使用Canvas繪製簡單工程符號(續)Canvas符號
- canvas動畫特效 之 星空Canvas動畫特效
- canvas動畫教程-1 引言Canvas動畫
- Canvas 動畫初體驗Canvas動畫
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- 用ListView簡單實現滑動列表View
- 使用 Proxy 實現簡單的 MVVM 模型MVVM模型