最近看了很多牛的動畫,想想自己的canvas的確很菜。
公式在那里,但是不是太會套。找demo發現都是很難的
於是找了個簡單的效果

圓環從中間擴散的效果
關鍵是 globalCompositeOperation合成操作,只留下重疊的部分

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>圓形擴散</title>
<style>
body {
overflow: hidden;
background: #000;
}
body,
html {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
<script type="text/javascript">
var oAnim=document.getElementById('canvas');
var context = oAnim.getContext("2d");
var radius=0
function drawCircle(){
context.beginPath();
render(radius);
context.arc(50,50,radius,0,Math.PI * 2);
context.closePath();
context.lineWidth=2;
context.strokeStyle='rgba(250,250,50,1)';
context.stroke();
radius +=0.5;//每幀半徑增加0.5
if(radius > 20){
radius=0;
}
}
function render(x) {
//默認值為source-over,覆蓋原圖上面,效果像z-index:999
var prev = context.globalCompositeOperation;
//只顯示canvas上原圖像的重疊部分
context.globalCompositeOperation = 'destination-in';
//設置主canvas的繪制透明度,圓圈中間的淺黃色部分
context.globalAlpha = 0.95;
//這一步目的是將canvas上的圖像變的透明
context.fillRect(0,0,40*x,40*x);
//在原圖像上重疊新圖像
context.globalCompositeOperation = prev;
//下面代用的drawcricle方法,圓圈覆蓋在正方形上
};
//在主canvas上畫新圓
setInterval(function(){
drawCircle();
},20);
</script>
</html>
