canvas簡單動畫案例(圓圈閃爍漸變動畫)
canvas的第二篇部落格,終於開始做動畫了,不得不說,canvas是真的強,雖然寫起來不是那麼順手,但是實現的東西真的讓我很滿意。
實現效果:
主要思想:隨機畫出圓圈,然後利用計時器動態重繪,實現圓圈的變化,動態移除;
程式碼如下,註釋已寫:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body{
margin: 0;
padding: 0;
}
html,body{
width: 100%;
height: 100%;
background-color: black;
overflow: hidden;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
// 圓圈動畫
// 物件導向開發
var animate={
screen_w:document.documentElement.clientWidth,//獲取顯示區域的寬高 定義以後需要的變數
screen_h:document.documentElement.clientHeight,
content2d:null,
x:null,
y:null,
r:10,
Hz:0,
arc:[],
randomloc:function(){//隨機 x y 座標
var x=Math.floor(Math.random()*this.screen_w);
var y=Math.floor(Math.random()*this.screen_h);
return[x,y];
},
randomcolor:function(){//隨機顏色(16777216=256*256*256)
return '#'+parseInt(Math.random()*16777216).toString(16);//16進位制顏色
},
draw:function(){//畫出圓圈
this.x=this.randomloc()[0];
this.y=this.randomloc()[1];
this.content2d.beginPath();//開始畫圖
var color=this.randomcolor();
this.content2d.strokeStyle=color;
this.content2d.arc(this.x,this.y,this.r,0,Math.PI*2);
this.content2d.stroke();//閉合線圈
this.content2d.closePath();//結束畫圖
this.arc.push(
[this.x,this.y,this.r,color,0]
);//arc儲存所有的圓圈的座標半徑和顏色
},
// 初始化
init:function(){
var canvas=document.getElementById('canvas');//獲取canvas元素
canvas.width=this.screen_w;//畫布大小為螢幕顯示大小
canvas.height=this.screen_h;
this.content2d=canvas.getContext('2d');//2d模式
},
// 圓圈動畫,刪除圓圈(相當於動態改變半徑值重繪)
update:function(){
for(var i=0;i<this.arc.length;i++){
//清除當前的圓圈
this.content2d.clearRect(this.arc[i][0]-this.arc[i][2]-1,this.arc[i][1]-this.arc[i][2]-1,this.arc[i][2]*2.2,this.arc[i][2]*2.2);
this.content2d.beginPath();
var color=this.arc[i][3];
this.content2d.strokeStyle=color;
this.arc[i][2]++;//半徑增加
if(this.arc[i][2]>20){//如果半徑大於20,執行計數器,當計數器大於4時,移除當前圓圈
this.arc[i][2]=10;
this.arc[i][4]++;
if(this.arc[i][4]>4){
this.arc.splice(i,1);
i--;
continue;
}
}
this.content2d.arc(this.arc[i][0],this.arc[i][1],this.arc[i][2],0,Math.PI*2);//重繪
this.content2d.stroke();
this.content2d.closePath();
}
}
}
animate.init();
window.requestA=(function(){// h5計時器 利用螢幕重新整理率重新整理,效能很好,此為相容性寫法
return window.requestAnimationFrame ||
webkitRequestAnimationFrame ||
mozRequestAnimationFrame ||
msquestAnimationFrame||
function(callback){
setTimeout(callback,1000/60);
}
})();
(function loop(){//自執行函式,動態繪圖
window.requestA(loop);
animate.Hz++;
if(animate.Hz>1){
animate.Hz=0;
animate.draw();
animate.update();
}
})();
</script>
</body>
</html>
不留個言嘛~
相關文章
- HTML5-canvas動畫閃爍分析HTMLCanvas動畫
- 簡單CSS實現閃爍動畫(+1白話講解)CSS動畫
- 網站設計之Flash簡單動畫入門介紹(一)字型閃爍及漸顯網站動畫
- 實現閃爍燈星星動畫動畫
- 使用canvas實現簡單動畫Canvas動畫
- css3實現動畫閃爍效果CSSS3動畫
- SVG 漸變動畫效果SVG動畫
- 使用canvas繪製圓弧動畫Canvas動畫
- canvas簡單的畫布動畫 - KaiqisanCanvas動畫AI
- [微信小程式系列] 動畫案例之圓點沿著圓圈運動微信小程式動畫
- 簡單的CSS圓形縮放動畫CSS動畫
- jQuery夜晚天空滿天星星閃爍動畫程式碼jQuery動畫
- 教你如何用WPF實現文字粒子閃爍動畫效果動畫
- 我的部落格--群星閃爍地球旋轉動畫特效動畫特效
- 一個簡單的CSS圓形縮放動畫CSS動畫
- 【Android動畫】之Tween動畫 (漸變、縮放、位移、旋轉)Android動畫
- jQuery背景色漸變動畫效果jQuery動畫
- canvas簡單徑向漸變程式碼例項Canvas
- SVG簡單動畫SVG動畫
- 短視訊平臺原始碼,單條目重新整理notifyItem 去除閃爍動畫原始碼動畫
- Android 顏色漸變 屬性動畫Android動畫
- 【譯】React Native中的動畫漸變React Native動畫
- canvas水球動畫Canvas動畫
- canvas動畫心得Canvas動畫
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- JavaScript 簡單動畫效果JavaScript動畫
- 讓動畫變得更簡單之FLIP技術動畫
- Canvas繪製星光閃爍的生日祝福Canvas
- Android View動畫和屬性動畫簡單解析:AndroidView動畫
- 仿噹噹App首頁按鈕漸變動畫效果APP動畫
- 簡單的動畫 (numpy & PySimpleGUI)動畫GUI
- JavaScript簡單的動畫效果JavaScript動畫
- WPF簡單動畫實現動畫
- canvas實現簡答動畫張閉嘴效果Canvas動畫
- CSS3圓形旋轉變大動畫效果CSSS3動畫
- canvas動畫特效 之 星空Canvas動畫特效
- canvas動畫教程-1 引言Canvas動畫
- Canvas 動畫初體驗Canvas動畫