Canvas实现圆形进度条并显示数字百分比


本文摘自PHP中文网,作者迷茫,侵删。

实现效果

1.首先创建html代码

1

<canvas id="canvas" width="500" height="500" style="background:#000;"></canvas>

2.创建canvas环境

1

2

3

4

5

6

var canvas = document.getElementById('canvas'),  //获取canvas元素

            context = canvas.getContext('2d'),  //获取画图环境,指明为2d

            centerX = canvas.width/2,   //Canvas中心点x轴坐标

            centerY = canvas.height/2,  //Canvas中心点y轴坐标

            rad = Math.PI*2/100, //将360度分成100份,那么每一份就是rad度

            speed = 0.1; //加载的快慢就靠它了

3.绘制5像素宽的运动外圈

1

2

3

4

5

6

7

8

9

10

//绘制5像素宽的运动外圈

        function blueCircle(n){

            context.save();

            context.strokeStyle = "#fff"; //设置描边样式

            context.lineWidth = 5; //设置线宽

            context.beginPath(); //路径开始

            context.arc(centerX, centerY, 100 , -Math.PI/2, -Math.PI/2 +n*rad, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针)

            context.stroke(); //绘制

            context.closePath(); //路径结束            context.restore();

        }

4.绘制白色外圈

1

2

3

4

5

6

7

8

9

10

11

//绘制白色外圈

        function whiteCircle(){

            context.save();

            context.beginPath();

            context.lineWidth = 2; //设置线宽

            context.strokeStyle = "red";

            context.arc(centerX, centerY, 100 , 0, Math.PI*2, false);

            context.stroke();

            context.closePath();

            context.restore();

        }

5.百分比文字绘制

1

2

3

4

5

6

7

8

function text(n){

            context.save(); //save和restore可以保证样式属性只运用于该段canvas元素

            context.strokeStyle = "#fff"; //设置描边样式

            context.font = "40px Arial"; //设置字体大小和字体

            //绘制字体,并且指定位置

            context.strokeText(n.toFixed(0)+"%", centerX-25, centerY+10);

            context.stroke(); //执行绘制            context.restore();

        }

6.让它运动起来

1

2

3

4

5

6

7

8

//动画循环

        (function drawFrame(){            window.requestAnimationFrame(drawFrame);

            context.clearRect(0, 0, canvas.width, canvas.height);

            whiteCircle();

            text(speed);

            blueCircle(speed);            if(speed > 100) speed = 0;

            speed += 0.1;

        }());

完整代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>HTML5 Canvas 圆形进度条并显示数字百分比</title>

 

<style>

*{margin:0;padding:0;}

body{text-align:center;background-color:#000;}

</style>

 

</head>

<body>

 

<canvas id="canvas" width="500" height="500" style="background:#000;"></canvas>

<script>

    window.onload = function(){

        var canvas = document.getElementById('canvas'),  //获取canvas元素

            context = canvas.getContext('2d'),  //获取画图环境,指明为2d

            centerX = canvas.width/2,   //Canvas中心点x轴坐标

            centerY = canvas.height/2,  //Canvas中心点y轴坐标

            rad = Math.PI*2/100, //将360度分成100份,那么每一份就是rad度

            speed = 0.1; //加载的快慢就靠它了

             

        //绘制5像素宽的运动外圈

        function blueCircle(n){

            context.save();

            context.strokeStyle = "#fff"; //设置描边样式

            context.lineWidth = 5; //设置线宽

            context.beginPath(); //路径开始

            context.arc(centerX, centerY, 100 , -Math.PI/2, -Math.PI/2 +n*rad, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针)

            context.stroke(); //绘制

            context.closePath(); //路径结束

            context.restore();

        }

        //绘制白色外圈

        function whiteCircle(){

            context.save();

            context.beginPath();

            context.lineWidth = 2; //设置线宽

            context.strokeStyle = "red";

            context.arc(centerX, centerY, 100 , 0, Math.PI*2, false);

            context.stroke();

            context.closePath();

            context.restore();

        

        //百分比文字绘制

        function text(n){

            context.save(); //save和restore可以保证样式属性只运用于该段canvas元素

            context.strokeStyle = "#fff"; //设置描边样式

            context.font = "40px Arial"; //设置字体大小和字体

            //绘制字体,并且指定位置

            context.strokeText(n.toFixed(0)+"%", centerX-25, centerY+10);

            context.stroke(); //执行绘制

            context.restore();

        }

        //动画循环

        (function drawFrame(){

            window.requestAnimationFrame(drawFrame);

            context.clearRect(0, 0, canvas.width, canvas.height);

            whiteCircle();

            text(speed);

            blueCircle(speed);

            if(speed > 100) speed = 0;

            speed += 0.1;

        }());

    }

</script>

 

</body>

</html>

以上就是Canvas实现圆形进度条并显示数字百分比的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

canvas图片跨域会遇到的问题及解决方法总结

h5 canvas中fill 与stroke文字效果实现实例

canvas与svg的区别有什么?canvas和svg的区别比较

canvas中线段的端点与连接点详解

如何解决canvas绘图时遇到的跨域问题

html5 canvas标签是什么意思?canvas标签使用方法介绍

canvas的实例--时钟动画

html5 canvas如何绘制圆形?(代码实例)

用h5的canvas做出弹幕效果

html5 canvas画布的宽高为什么写在<canvas>标签里的详细介绍

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...