刚学js
想让4个圆圈里的动画都动 可是现在只动最后一个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>多个canvas</title>
</head>
<style>
body{ background: #ccc; }
*{margin:0 auto;}
li{list-style:none;}
.wrap{margin:20px auto; width:600px; margin:0 auto; }
li{float: left; margin:10px}
</style>
<body>
<ul class="wrap">
<li><canvas id="me-skill1"></canvas></li>
<li><canvas id="me-skill2"></canvas></li>
<li><canvas id="me-skill3"></canvas></li>
<li><canvas id="me-skill4"></canvas></li>
</ul>
<script src="http://static1.72byte.com/js/jquery.min.js"></script>
<script>
var canvas = [
document.getElementById('me-skill1'),
document.getElementById('me-skill2'),
document.getElementById('me-skill3'),
document.getElementById('me-skill4'),
];
//边框颜色组
var canvasBg = ["#e16652","#36d394","#3ab0e2","#dfae47"];
// 值
var nowRange = 20;
// 画布属性
var mW = canvas.width = 110;//宽度
var mH = canvas.height = 110;//高度
var lineWidth = 2;
//画圆心
var r = mH / 2; //圆心
var cR = r - 2*lineWidth ;
//Sin 曲线属性
var sX = 0;
var sY = mH/2;
var axisLength = mW; //轴长
var waveWidth = 0.055 ; //波浪宽度,数越小越宽
var waveHeight = 5; //波浪高度,数越大越高
var speed = 0.09; //波浪速度,数越大速度越快
var xOffset = 0; //波浪x偏移量
// 画圈函数
var IsdrawCircled = false;
//画sin 曲线函数
var drawSin = function(xOffset){
ctx.save();
var points=[]; //用于存放绘制Sin曲线的点
ctx.beginPath();
//封闭路径
//在整个轴长上取点
for(var x = sX; x<axisLength; x += 20/axisLength){
//此处坐标(x,y)的取点,依靠公式 “振幅高*sin(x*振幅宽 + 振幅偏移量)”
var y = -Math.sin((sX+x) * waveWidth + xOffset);
var dY = mH * (1 - nowRange/100);
points.push([x, dY + y * waveHeight]);
ctx.lineTo(x, dY + y * waveHeight);
}
//封闭路径
ctx.lineTo(axisLength, mH);
ctx.lineTo(sX, mH);
ctx.lineTo(points[0][0],points[0][1]);
ctx.fillStyle = canvasBg[i];
ctx.fill();
ctx.restore();
}
var insctx = function(){
//内实心情圈
ctx.beginPath();
ctx.arc(r,r,20,0,Math.PI*2);
ctx.fillStyle = canvasBg[i];
ctx.fill();
ctx.restore();
}
//文字
var insText = function(){
ctx.save();
ctx.fillStyle = "#fff";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.font = "12px Microsoft Yahei";
ctx.fillText("50%", r, r);
ctx.restore();
};
//动画
var render = function(){
ctx.clearRect(0, 0, mW, mH);
drawSin(xOffset);
insctx();//执行内圆
insText();//执行文字
xOffset += .02;
requestAnimationFrame(render);
}
// 循环4个canvas
for(var i = 0; i<canvas.length;i++){
canvas[i].width = 110;
canvas[i].height =110;
var ctx=canvas[i].getContext("2d");
ctx.beginPath();
ctx.arc(r, r, cR+1, 0, Math.PI * 2);
ctx.strokeStyle = canvasBg[i];
ctx.lineWidth = lineWidth;
ctx.stroke();//画空心圆
ctx.beginPath();
ctx.arc(r, r, cR, 0, 2 * Math.PI);
ctx.clip();
insctx();//执行文字
insText(); //执行内圆
drawSin(xOffset);//执行波浪
render()//执行动画
}
</script>
</body>
</html>
大神帮我看看?
看你的ctx到底是哪一个环境? 应该是ctx的问题,被覆盖了。 最好把ctx当作一个参数传到绘制方法中。