JavaScript?canvas繪制動(dòng)態(tài)圓環(huán)進(jìn)度條
本文實(shí)例為大家分享了JavaScript canvas繪制動(dòng)態(tài)圓環(huán)進(jì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(); ? ? ? ? ? ? } ? ? ? ? ? ? ? //繪制運(yùn)動(dòng)圓環(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坐標(biāo),y坐標(biāo),半徑,起始角度,終止角度,順時(shí)針/逆時(shí)針) ? ? ? ? ? ? ? ? context.stroke(); ? ? ? ? ? ? ? ? context.closePath(); ? ? ? ? ? ? ? ? context.restore(); ? ? ? ? ? ? } ? ? ? ? ? ? ? //繪制文字 ? ? ? ? ? ? function text(n){ ? ? ? ? ? ? ? ? context.save(); //save和restore可以保證樣式屬性只運(yùn)用于該段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í)行動(dòng)畫 ? ? ? ? ? ? (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; }
有些繪制細(xì)節(jié)需要注意,為了保證繪制的清晰度,canvas的大小需要設(shè)置為canvas父元素大小的2倍。
其他的代碼都有詳細(xì)的注釋,自己拷一下,運(yùn)行一下就知道
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
layui 點(diǎn)擊重置按鈕, select 并沒有被重置的解決方法
今天小編就為大家分享一篇layui 點(diǎn)擊重置按鈕, select 并沒有被重置的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09json對象轉(zhuǎn)字符串如何實(shí)現(xiàn)
本文將介紹js json對象與字符串如何實(shí)現(xiàn)轉(zhuǎn)換,有需要的朋友可以參考下2012-12-12JavaScript中使用正則匹配多條,且獲取每條中的分組數(shù)據(jù)
該問題在使用Ajax遠(yuǎn)程獲取某網(wǎng)頁數(shù)據(jù)時(shí)經(jīng)常遇見 如果目標(biāo)頁面是XML,就好辦了,實(shí)用XMLDOM可以很輕松完成任務(wù)。2010-11-11JavaScript實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音的庫文件示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音的庫文件,結(jié)合具體實(shí)例分析了JSPinyin庫文件與簡單使用技巧,需要的朋友可以參考下2016-12-12js實(shí)現(xiàn)簡單登錄功能的實(shí)例代碼
js驗(yàn)證用戶身份,登錄成功之后等待一定秒數(shù),跳轉(zhuǎn)到操作頁面。使用window函數(shù)。代碼如下2013-11-11微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果
這篇文章主要介紹了微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果,結(jié)合實(shí)例形式分析了animation結(jié)合js時(shí)間函數(shù)實(shí)現(xiàn)循環(huán)動(dòng)畫效果的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07用javascript實(shí)現(xiàn)gb2312轉(zhuǎn)utf-8的腳本
用javascript實(shí)現(xiàn)gb2312轉(zhuǎn)utf-8的腳本...2007-05-05JavaScript中的"=、==、==="區(qū)別講解
今天小編就為大家分享一篇關(guān)于JavaScript中的"=、==、==="區(qū)別講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01jfinal與bootstrap的登出實(shí)戰(zhàn)詳解
這篇文章主要為大家詳細(xì)介紹了jfinal與bootstrap的登出實(shí)戰(zhàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11