首頁 web前端 H5教程 詳解canvas實現圓弧、圓環進度條的實例方法

詳解canvas實現圓弧、圓環進度條的實例方法

May 27, 2017 pm 03:26 PM

下面總結了自己在專案中的圓形進度條效果的實現方式,希望對大家有幫助:

此方法透過canvas#繪製圓形的方法來實現動態圓環進度條,直接上程式碼,問問題請看註解:

HTML程式碼如下, 在頁面建立一個畫布即可:  

<canvas id="canvas" width="300" height="300">
    <p>抱歉,您的浏览器不支持canvas</p>
 </canvas>
登入後複製

#JS分成兩大部分,
第一部分實現整體功能,第二部分呼叫:
第一部分:
  第一部分功能原理大概是,畫兩個圓,一個是底色圓,第二個是動態載入的圓弧,進度透過計時器 載入;顏色加漸變色; 

 function toCanvas(id ,progress){                canvas进度条
                var canvas = document.getElementById(id),
                ctx = canvas.getContext("2d"),
                percent = progress,  最终百分比                circleX = canvas.width / 2,  中心x坐标                circleY = canvas.height / 2,  中心y坐标                radius = 100, 圆环半径                lineWidth = 5,  圆形线条的宽度                fontSize = 20; 字体大小
                 两端圆点
                function smallcircle1(cx, cy, r) {
                    ctx.beginPath();                    //ctx.moveTo(cx + r, cy);                    ctx.lineWidth = 1;
                    ctx.fillStyle = &#39;#06a8f3&#39;;
                    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 = &#39;#00f8bb&#39;;
                     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 = &#39;#eee&#39;;
                     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, &#39;#06a8f3&#39;);                     //linGrad.addColorStop(0.5, &#39;#9bc4eb&#39;);                     linGrad.addColorStop(1.0, &#39;#00f8bb&#39;);
                     ctx.strokeStyle = linGrad;                      圆弧两端的样式                     ctx.lineCap = &#39;round&#39;;                     圆弧                     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 + &#39;px April&#39;;
                     ctx.textAlign = &#39;center&#39;;
                     ctx.textBaseline = &#39;middle&#39;;
                     ctx.fillStyle = &#39;#999&#39;;
                     ctx.fillText(parseFloat(process).toFixed(0) + &#39;%&#39;, circleX, circleY);    
                  
                     圆形                     circle(circleX, circleY, radius);                     
                      圆弧                     sector(circleX, circleY, radius, Math.PI*2/3, process);
                     两端圆点                     smallcircle1(150+Math.cos(2*Math.PI/360*120)*100, 150+Math.sin(2*Math.PI/360*120)*100, 5);
                     smallcircle2(150+Math.cos(2*Math.PI/360*(120+process*3))*100, 150+Math.sin(2*Math.PI/360*(120+process*3))*100, 5);                     控制结束时动画的速度
                     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);
                     
            }
第二部分,调用封装好的代码:
            toCanvas(&#39;canvas&#39;,50);
登入後複製

【相關推薦】

1. Canvas實作圓形進度條並顯示數字百分比

2. 利用CSS clip 實作音訊播放圓環進度條教學實例

3. 分享h5 canvas圓圈進度條的實例程式碼

4. H5 canvas實作圓形動態載入進度實例

#

以上是詳解canvas實現圓弧、圓環進度條的實例方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用HTML和CSS設定進度條的顏色? 如何使用HTML和CSS設定進度條的顏色? Sep 19, 2023 pm 08:25 PM

在網站開發中,進度條是網站的重要組成部分。進度條顯示了進程的進度。借助它,用戶可以看到網站上正在進行的工作的狀態,包括載入時間、文件上傳、文件下載和其他類似任務。預設情況下,它呈灰色。然而,為了使進度條突出並具有視覺吸引力,可以使用HTML和CSS來改變它們的顏色。什麼是進度條?進度條用於顯示任務的進度。它是一個圖形使用者介面元素。它基本上由一個水平條組成,隨著任務的進行逐漸填充,同時伴隨著百分比值或其他完成指示器。進度條在網路應用程式中用於向使用者提供關於完成諸如文件上傳、文件下載或軟體安裝等過

JavaScript 如何實作頁面載入進度條功能? JavaScript 如何實作頁面載入進度條功能? Oct 27, 2023 am 08:57 AM

JavaScript如何實作頁面載入進度條功能?在現代網路應用中,頁面載入速度是使用者體驗的關鍵因素之一。為了向使用者展示載入過程,許多網站和應用程式會使用載入進度條。 JavaScript提供了一種簡單而有效的方法來實作頁面載入進度條功能。具體實現過程如下:建立HTML結構首先,在頁面的適當位置建立進度條的HTML結構,常見的是將進度條放置在

如何使用Vue實現進度條特效 如何使用Vue實現進度條特效 Sep 19, 2023 am 09:22 AM

如何使用Vue實現進度條特效進度條是常見的一種介面元素,它可以用來展示一個任務或操作的完成情況。在Vue框架中,我們可以透過一些簡單的程式碼來實現進度條的特效效果。本文將介紹如何使用Vue來實現進度條特效,並提供具體程式碼範例。建立Vue元件首先,我們需要建立一個Vue元件來實現進度條的功能。在Vue中,元件是可以重複使用的,我們可以在多個地方使用。建立一個名為Pro

canvas箭頭插件有哪些 canvas箭頭插件有哪些 Aug 21, 2023 pm 02:14 PM

canvas箭頭外掛有:1、Fabric.js,具有簡單易用的API,可以創建自訂箭頭效果;2、Konva.js,提供了繪製箭頭的功能,可以創建各種箭頭樣式;3、Pixi.js ,提供了豐富的圖形處理功能,可以實現各種箭頭效果;4、Two.js,可以輕鬆地創建和控制箭頭的樣式和動畫;5、Arrow.js,可以創建各種箭頭效果;6、Rough .js,可以創造手繪效果的箭頭等。

學習canvas框架 詳解常用的canvas框架 學習canvas框架 詳解常用的canvas框架 Jan 17, 2024 am 11:03 AM

探索Canvas框架:了解常用的Canvas框架有哪些,需要具體程式碼範例引言:Canvas是HTML5中提供的一個繪圖API,透過它我們可以實現豐富的圖形和動畫效果。為了提高繪圖的效率和便利性,許多開發者開發了不同的Canvas框架。本文將介紹一些常用的Canvas框架,並提供具體程式碼範例,以幫助讀者更深入地了解這些框架的使用方法。一、EaselJS框架Ea

canvas時鐘有哪些細節 canvas時鐘有哪些細節 Aug 21, 2023 pm 05:07 PM

canvas時鐘的細節有時鐘外觀、刻度線、數位時鐘、時針、分針和秒針、中心點、動畫效果、其他樣式等。詳細介紹:1、時鐘外觀,可以使用Canvas繪製一個圓形錶盤作為時鐘的外觀,可以設定錶盤的大小、顏色、邊框等樣式;2、刻度線,在錶盤上繪製刻度線,表示小時或分鐘的位置;3、數位時鐘,可在錶盤上繪製數位時鐘,表示目前的小時和分鐘;4、時針、分針和秒針等等。

html2canvas有哪些版本 html2canvas有哪些版本 Aug 22, 2023 pm 05:58 PM

html2canvas的版本有html2canvas v0.x、html2canvas v1.x等。詳細介紹:1、html2canvas v0.x,這是html2canvas的早期版本,目前最新的穩定版本是v0.5.0-alpha1。它是一個成熟的版本,已經被廣泛使用,並且在許多專案中得到了驗證;2、html2canvas v1.x,這是html2canvas的新版本。

uniapp實現如何使用canvas繪製圖表和動畫效果 uniapp實現如何使用canvas繪製圖表和動畫效果 Oct 18, 2023 am 10:42 AM

uniapp實現如何使用canvas繪製圖表和動畫效果,需要具體程式碼範例一、引言隨著行動裝置的普及,越來越多的應用程式需要在行動裝置上展示各種圖表和動畫效果。而uniapp作為一款基於Vue.js的跨平台開發框架,提供了使用canvas繪製圖表和動畫效果的能力。本文將介紹uniapp如何使用canvas來實現圖表和動畫效果,並給出具體的程式碼範例。二、canvas

See all articles