JavaScript?canvas繪制動態(tài)圓環(huán)進度條
本文實例為大家分享了JavaScript canvas繪制動態(tài)圓環(huán)進度條的具體代碼,供大家參考,具體內(nèi)容如下

由于使用的是vue開發(fā),所以就展示一下繪制函數(shù)好了,上圖是效果圖
drawMain(drawing_elem, percent, forecolor, bgcolor) {
? ? ? ? ? ? /*
? ? ? ? ? ? ? ? @drawing_elem: 繪制對象
? ? ? ? ? ? ? ? @percent:繪制圓環(huán)百分比, 范圍[0, 100]
? ? ? ? ? ? ? ? @forecolor: 繪制圓環(huán)的前景色,顏色代碼
? ? ? ? ? ? ? ? @bgcolor: 繪制圓環(huán)的背景色,顏色代碼
? ? ? ? ? ? */
? ? ? ? ? ? var context = drawing_elem.getContext("2d");
? ? ? ? ? ? var center_x = drawing_elem.width / 2;
? ? ? ? ? ? var center_y = drawing_elem.height / 2;
? ? ? ? ? ? var rad = Math.PI*2/100;?
? ? ? ? ? ? var speed = 0;
? ? ? ? ? ??
? ? ? ? ? ? // 繪制背景圓圈
? ? ? ? ? ? function backgroundCircle(){
? ? ? ? ? ? ? ? context.save();
? ? ? ? ? ? ? ? context.beginPath();
? ? ? ? ? ? ? ? context.lineWidth = 8; //設(shè)置線寬
? ? ? ? ? ? ? ? var radius = center_x - context.lineWidth;
? ? ? ? ? ? ? ? context.lineCap = "round";
? ? ? ? ? ? ? ? context.strokeStyle = bgcolor;
? ? ? ? ? ? ? ? context.arc(center_x, center_y, radius, 0, Math.PI*2, false);
? ? ? ? ? ? ? ? context.stroke();
? ? ? ? ? ? ? ? context.closePath();
? ? ? ? ? ? ? ? context.restore();
? ? ? ? ? ? }
?
? ? ? ? ? ? //繪制運動圓環(huán)
? ? ? ? ? ? function foregroundCircle(n){
? ? ? ? ? ? ? ? context.save();
? ? ? ? ? ? ? ? context.strokeStyle = forecolor;
? ? ? ? ? ? ? ? context.lineWidth = 8;
? ? ? ? ? ? ? ? context.lineCap = "round";
? ? ? ? ? ? ? ? var radius = center_x - context.lineWidth;
? ? ? ? ? ? ? ? context.beginPath();
? ? ? ? ? ? ? ? context.arc(center_x, center_y, radius , -Math.PI/2, -Math.PI/2 +n*rad, false); //用于繪制圓弧context.arc(x坐標,y坐標,半徑,起始角度,終止角度,順時針/逆時針)
? ? ? ? ? ? ? ? context.stroke();
? ? ? ? ? ? ? ? context.closePath();
? ? ? ? ? ? ? ? context.restore();
? ? ? ? ? ? }
?
? ? ? ? ? ? //繪制文字
? ? ? ? ? ? function text(n){
? ? ? ? ? ? ? ? context.save(); //save和restore可以保證樣式屬性只運用于該段canvas元素
? ? ? ? ? ? ? ? context.fillStyle = forecolor;
? ? ? ? ? ? ? ? var font_size = 40;
? ? ? ? ? ? ? ? context.font = font_size + "px Helvetica";
? ? ? ? ? ? ? ? var text_width = context.measureText(n.toFixed(0)+"%").width;
? ? ? ? ? ? ? ? context.fillText(n.toFixed(0)+"%", center_x-text_width/2, center_y + font_size/2);
? ? ? ? ? ? ? ? context.restore();
? ? ? ? ? ? }
?
? ? ? ? ? ? //執(zhí)行動畫
? ? ? ? ? ? (function drawFrame(){
? ? ? ? ? ? ? ? window.requestAnimationFrame(drawFrame);
? ? ? ? ? ? ? ? context.clearRect(0, 0, drawing_elem.width, drawing_elem.height);
? ? ? ? ? ? ? ? backgroundCircle();
? ? ? ? ? ? ? ? text(speed);
? ? ? ? ? ? ? ? foregroundCircle(speed);
? ? ? ? ? ? ? ? if(speed >= percent) return;
? ? ? ? ? ? ? ? speed += 1;
? ? ? ? ? ? }());
? ? ? ? },調(diào)用的話
var time_canvas = document.getElementById("time-graph-canvas");
?this.drawMain(time_canvas, 70, "#85d824", "#eef7e4");
var weather_canvas = document.getElementById("weather-graph-canvas");
? ? ? ? this.drawMain(weather_canvas, 90, "#2ba0fb", "#e5f1fa");html文件
<div class="time-graph"> ? ?<canvas id="time-graph-canvas" width="160" height="160"></canvas> </div>
css文件
.time-graph {
?? ?padding-top: 20px;
?? ?display:flex;
?? ?display:-webkit-flex;
?? ?justify-content: center;
?? ?align-items: center;
}
?
#time-graph-canvas {
?? ?width: 80px;
?? ?height: 80px;
}有些繪制細節(jié)需要注意,為了保證繪制的清晰度,canvas的大小需要設(shè)置為canvas父元素大小的2倍。
其他的代碼都有詳細的注釋,自己拷一下,運行一下就知道
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js窗口關(guān)閉提示信息(兼容IE和firefox)
這篇文章主要介紹了當關(guān)閉窗口的時候,顯示窗口提示信息,友好的進行提示,防止丟失重要信息,需要的朋友可以參考一下2015-10-10
e.target與e.currentTarget對象的使用區(qū)別詳解
這篇文章主要為大家介紹了e.target與e.currentTarget的使用區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
js經(jīng)驗分享 JavaScript反調(diào)試技巧
在這篇文章中,我打算跟大家總結(jié)一下關(guān)于JavaScript反調(diào)試技巧方面的內(nèi)容。值得一提的是,其中有些方法已經(jīng)被網(wǎng)絡(luò)犯罪分子廣泛應(yīng)用到惡意軟件之中了,需要的朋友可以參考下2018-03-03
JavaScript?進階問題列表(各種js代碼段66-107)
從基礎(chǔ)到進階,測試你有多了解?JavaScript,刷新你的知識,或者幫助你的?coding?面試!?:muscle:?:rocket:?我每周都會在這個倉庫下更新新的問題,2024-11-11
vant uploader實現(xiàn)上傳圖片拖拽功能(設(shè)為封面)
這篇文章主要介紹了vant uploader實現(xiàn)上傳圖片拖拽功能(設(shè)為封面),這個功能在日常生活中經(jīng)常會用到,操作非常方便,今天通過實例代碼介紹實現(xiàn)過程,需要的朋友可以參考下2021-10-10

