canvas实现半圆环形进度条
html部分
<canvas id="canvas" width="150" height="150"><p>抱歉,您的浏览器不支持canvas</p> </canvas>
js部分
toCanvas('canvas','red',30);/*** 生成环形进度条*/function toCanvas(id, color, progress) {//canvas进度条var canvas = document.getElementById(id),ctx = canvas.getContext("2d"),percent = progress, //最终百分比circleX = canvas.width / 2, //中心x坐标circleY = canvas.height / 2, //中心y坐标radius = 60, //圆环半径cradius = 75, // canvas半径lineWidth = 6, //圆形线条的宽度fontSize = 20; //字体大小//两端圆点function smallcircle1(cx, cy, r) {ctx.beginPath();//ctx.moveTo(cx + r, cy);ctx.lineWidth = 1;ctx.fillStyle = '#06a8f3';ctx.arc(cx, cy, r, 0, Math.PI * 2);ctx.fill();}function smallcircle2(cx, cy, r) {ctx.beginPath();//ctx.moveTo(cx + r, cy);ctx.lineWidth = 1;ctx.fillStyle = '#fff';ctx.arc(cx, cy, r, 0, Math.PI * 2);ctx.fill();}//画圆function circle(cx, cy, r) {ctx.beginPath();//ctx.moveTo(cx + r, cy);ctx.lineWidth = lineWidth;ctx.strokeStyle = '#eee';ctx.arc(cx, cy, r, Math.PI * 2 / 3, Math.PI * 1 / 3);ctx.stroke();}//画弧线function sector(cx, cy, r, startAngle, endAngle, anti) {ctx.beginPath();//ctx.moveTo(cx, cy + r); // 从圆形底部开始画ctx.lineWidth = lineWidth;// 渐变色 - 可自定义// var linGrad = ctx.createLinearGradient(// circleX-radius-lineWidth, circleY, circleX+radius+lineWidth, circleY// );// linGrad.addColorStop(0.0, '#06a8f3');// //linGrad.addColorStop(0.5, '#9bc4eb');// linGrad.addColorStop(1.0, '#00f8bb');// ctx.strokeStyle = linGrad;// 进度条颜色ctx.strokeStyle = color;//圆弧两端的样式ctx.lineCap = 'round';//圆弧ctx.arc(cx, cy, r,(Math.PI * 2 / 3),(Math.PI * 2 / 3) + endAngle / 100 * (Math.PI * 5 / 3),false);ctx.stroke();}//刷新function loading() {if (process >= percent) {clearInterval(circleLoading);}//清除canvas内容ctx.clearRect(0, 0, circleX * 2, circleY * 2);//中间的字ctx.font = fontSize + 'px April';ctx.textAlign = 'center';ctx.textBaseline = 'middle';ctx.fillStyle = '#999';ctx.fillText(parseFloat(process).toFixed(0) + '%', circleX, circleY);//圆形circle(circleX, circleY, radius);//圆弧sector(circleX, circleY, radius, Math.PI * 2 / 3, process);//两端圆点smallcircle1(cradius + Math.cos(2 * Math.PI / 360 * 120) * radius, cradius + Math.sin(2 * Math.PI / 360 * 120) *radius, 0);smallcircle2(cradius + Math.cos(2 * Math.PI / 360 * (120 + process * 3)) * radius, cradius + Math.sin(2 * Math.PI /360 * (120 + process * 3)) * radius, 2);//控制结束时动画的速度if (process / percent > 0.90) {process += 0.30;} else if (process / percent > 0.80) {process += 0.55;} else if (process / percent > 0.70) {process += 0.75;} else {process += 1.0;}}var process = 0.0; //进度var circleLoading = window.setInterval(function() {loading();}, 20);}
转载于:https://www.cnblogs.com/duanyue/p/10476443.html
canvas实现半圆环形进度条相关推荐
- 基于canvas 2D实现微信小程序自定义组件-环形进度条
基于canvas 2D实现微信小程序自定义组件-环形进度条 最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个 ...
- 进度条上的小圆点怎么做_傲视网:【AE教程】如何制作环形进度条(第一讲)...
原标题:傲视网:[AE教程]如何制作环形进度条(第一讲) 大家好,福利来啦!这里将分享如何制作环形进度条,教你如何从入门到精通学AE. 环形进度条是个特殊的动画,在旋转的基础上还要选择性地显示部分区域 ...
- android canvas_Android 自定义View篇(七)实现环形进度条效果
前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...
- 仿MIUI音量变化环形进度条实现
Android中使用环形进度条的业务场景事实上蛮多的,比方下载文件的时候使用环形进度条.会给用户眼前一亮的感觉:再比方我大爱的MIUI系统,它的音量进度条就是使用环形进度条,尽显小米"为发烧 ...
- 自定义控件——环形进度条
系统提供的环形进度条无法显示进度,且不会停止转动,所以要用到能显示进度的进度条时,只能自己定义一个控件. API Demos里面有提供类似的画法,API Demos --> Graphics - ...
- 环形进度条ProgressBar
效果 代码: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color ...
- Android花样loading进度条(四)-渐变色环形进度条
背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们对配文字环形进度条稍加变换,将圆环颜色改为渐变色的形式,使得进 ...
- Android花样loading进度条(二)-简单环形进度条
背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们从圆形进度条讲起,讲简单形式的环形进度条,只有进度色彩,没有进 ...
- 自定义环形进度条RoundProgressBar
一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...
最新文章
- pyqt5程序发生错误不中断_关于Windows页面错误的一些基础概念
- 清华计算机学院新成立,清华AI更进一步:清华大学成立人工智能国际治理研究院...
- vue父组件传值给字组件
- 【很详细】JDK安装与环境变量配置
- 智伴机器人课文跟读哪里有_火了!智伴机器人竟然出现在2018年高考试卷
- 经典商务未来科技海报PSD分层模板,以后绝对用得上
- java.net.BindException: Address already in use解决方法
- 我在51cto博客安家了!
- 更改电脑外部串口端口COM号
- FreeBSD下MongoDB数据库的安装
- 官方文档——一篇文章弄懂Flutter中的布局
- 《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流
- vue路由钩子函数(进入和离开钩子函数)
- Adobe Flash Builder 四 序列号
- 防火墙和IPS有什么区别
- 给UILabel中的文字加删除线
- STM32开发(14)----CubeMX配置ADC
- Anolis OS 8.2 RC2 发行,支持飞腾、海光、兆芯、鲲鹏等芯片
- 大叔遇上御姐丈母娘【十】
- CANVAS drawImage 绘图图片模糊已解决