canvas基础--圆

本文介绍了HTML5 Canvas的基础知识,通过示例详细讲解如何使用canvas绘制圆和环形进度条。首先,展示了绘制简单圆形的方法,然后逐步升级,创建太极图案。最后,讲解了如何实现动态的环形进度条,包括设置渐变颜色和添加数字显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绘制圆与绘制矩形的步骤基本一样:
以一个小案例示范吧:
```
var myCanvas = document.getElementById("myCanvas");
var context = myCanvas.getContext('2d');
// 前两个参数为圆心的坐标,第三个参数:半径,第四个:开始角度,第五个:圆结束角度
//,第六个参数:是否逆时针(true为逆时针,false为顺时针);
context.beginPath();
context.fillStyle = "white";
context.arc(120, 100, 50, 0, Math.PI * 2, false);
context.fill();
context.beginPath();
context.fillStyle = "orange";
context.arc(100, 100, 50, 0, Math.PI * 2, false);
context.fill();
```
效果图:
![屏幕快照 2017-12-27 下午9.08.14.png](http://upload-images.jianshu.io/upload_images/7426646-c5303159086a69e6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


根据上述效果,我们可以来画一个太极图:
```
        context.beginPath();
context.fillStyle = "black";
context.arc(200, 200, 50, 0, Math.PI * 2, false);
context.fill();


context.beginPath();
context.fillStyle = "white";
context.arc(200, 200, 50, -(Math.PI / 2), Math.PI / 2, false);
context.fill();


context.beginPath();
context.fillStyle = "black";
context.arc(200, 175, 25, 0, Math.PI * 2, false);
context.fill();


context.beginPath();
context.fillStyle = "white";
context.arc(200, 225, 25, 0, Math.PI * 2, false);
context.fill();


context.beginPath();
context.fillStyle = "white";
context.arc(200, 175, 5, 0, Math.PI * 2, false);
context.fill();


context.beginPath();
context.fillStyle = "black";
context.arc(200, 225, 5, 0, Math.PI * 2, false);
context.fill();
```
效果图:![屏幕快照 2017-12-27 下午9.11.07.png](http://upload-images.jianshu.io/upload_images/7426646-47822d478e08a3d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
接下来就要增加一定的难度了,绘制**环形进度条**:
###### 注意:一定要给<canvas>80%</canvas>标签一个innerHTML(设置百分数,例如:80%),否则,无法展示动态效果。
* 封装函数画圆:
```
function draw(percent){
//外框圆
context.beginPath();
context.arc(50,50,45,0,Math.PI*2);
context.strokeStyle = "rgb(245,245,245)";
context.stroke();

//进度圆
context.beginPath();
var per = 2*Math.PI/100*percent;
context.arc(50,50,40,0,per);
context.lineWidth = 8;
var gradient = context.createLinearGradient(0,0,100,0);
gradient.addColorStop(0,"blue");
gradient.addColorStop(0.5,"pink");
gradient.addColorStop(1,"yellow");
context.strokeStyle = gradient;
context.stroke();
}
```


在圆的内部添加数字,帮助我们看进度:
```
function drawText(text){
context.beginPath();
context.fillStyle = "#0000FF";
context.font = "20px Arial";
context.textBaseline = "middle";
context.textAlign = "center";
context.fillText(text,50,50);
}
```
添加计时器,以便我们能看到画圆的效果:
```
        var start = 0;
var timer =  setInterval(function(){
    //清空画布
    context.clearRect(0,0,myCanvas.width,myCanvas.height);
var percentText = myCanvas.innerHTML;
//去除空格
percentText = percentText.trim();
//去掉%
percentText =percentText.substr(0,percentText.length-1);
start++;
//~~将字符串转化为number类型
if(start>=~~percentText){
    start =~~percentText;
clearInterval(timer);
}
console.log(typeof ~~percentText);
draw(start);
drawText(start + "%");
},100);
```
最后效果:(格式问题,就只有图片,不上传视频了)![屏幕快照 2017-12-27 下午9.41.08.png](http://upload-images.jianshu.io/upload_images/7426646-b6a3e632695e8428.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值