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>
不留個言嘛~
相關文章
- canvas簡單的畫布動畫 - KaiqisanCanvas動畫AI
- 簡單CSS實現閃爍動畫(+1白話講解)CSS動畫
- 使用canvas實現簡單動畫Canvas動畫
- SVG 漸變動畫效果SVG動畫
- css3實現動畫閃爍效果CSSS3動畫
- 使用canvas繪製圓弧動畫Canvas動畫
- Canvas畫圖-一個比想象中更騷氣的圓(漸變圓環)Canvas
- 手把手教你畫圓錐漸變
- Android 顏色漸變 屬性動畫Android動畫
- 【譯】React Native中的動畫漸變React Native動畫
- 教你如何用WPF實現文字粒子閃爍動畫效果動畫
- canvas動畫心得Canvas動畫
- canvas水球動畫Canvas動畫
- canvas簡單畫板效果Canvas
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- JavaScript 簡單動畫效果JavaScript動畫
- 短視訊平臺原始碼,單條目重新整理notifyItem 去除閃爍動畫原始碼動畫
- Vue canvas繪製圓形進度條動畫載入VueCanvas動畫
- 簡單的動畫 (numpy & PySimpleGUI)動畫GUI
- JavaScript簡單的動畫效果JavaScript動畫
- 讓動畫變得更簡單之FLIP技術動畫
- canvas動畫特效 之 星空Canvas動畫特效
- canvas動畫教程-1 引言Canvas動畫
- Canvas 動畫初體驗Canvas動畫
- 分享一個簡單的畫刷動畫效果:?️BrushEffect動畫
- 【canvas】動畫原理の胡克定律Canvas動畫
- canvas之實現控制動畫Canvas動畫
- canvas繪製動畫的技巧Canvas動畫
- 基於canvas的骨骼動畫Canvas動畫
- 請使用canvas畫一個橢圓Canvas
- Canvas 實現畫中畫動畫效果–網易娛樂年度盤點H5動畫解密Canvas動畫H5解密
- Canvas 實現畫中畫動畫效果--網易娛樂年度盤點H5動畫解密Canvas動畫H5解密
- Flutter Animation(1)動畫的簡單使用Flutter動畫
- CSS變形動畫CSS動畫
- Canvas百分比動畫Canvas動畫
- 萬彩動畫大師教程 | 如何實現物件的閃動的動畫效果動畫物件
- 畫一個漸變的影像
- iOS動畫專題·UIView二維形變動畫與CAAnimation核心動畫(transform動畫,基礎,關鍵幀,組動畫,路徑動畫,貝塞爾曲線)iOS動畫UIViewORM