溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何利用canvas實(shí)現(xiàn)環(huán)形進(jìn)度條

發(fā)布時(shí)間:2021-05-12 13:10:11 來源:億速云 閱讀:167 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)如何利用canvas實(shí)現(xiàn)環(huán)形進(jìn)度條的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

前提:有時(shí)候在項(xiàng)目中會(huì)有用到進(jìn)度條的情況,使用css3也可以實(shí)現(xiàn),但是對于性能不好的設(shè)備,或者網(wǎng)絡(luò)不好的情況下,卡頓現(xiàn)象非常明顯,避免出現(xiàn)不流暢的尷尬情況,所以記錄一下,使用canvas來實(shí)現(xiàn)的方法。

效果圖

如何利用canvas實(shí)現(xiàn)環(huán)形進(jìn)度條

DOM中,首先定義canvas畫板元素:

<canvas id="canvas" width="500" height="500" style="background:#F7F7F7;">
    <p>you browser not support canvas!</p>
  </canvas>

對于不支持canvas的瀏覽器則會(huì)顯示:you browser not support canvas!

接下來是js編寫:

定義canvas.js并在頁面引入

var canvas = document.getElementById('canvas'), //獲取canvas元素
  context = canvas.getContext('2d'), //獲取畫圖環(huán)境,指明為2d
  centerX = canvas.width / 2, //Canvas中心點(diǎn)x軸坐標(biāo)
  centerY = canvas.height / 2, //Canvas中心點(diǎn)y軸坐標(biāo)
  rad = Math.PI * 2 / 100, //將360度分成100份,那么每一份就是rad度
  speed = 0.1; //加載的快慢就靠它了

//繪制藍(lán)色外圈
function blueCircle(n) {
  context.save();
  context.beginPath();
  context.strokeStyle = "#49f";
  context.lineWidth = 12;
  context.arc(centerX, centerY, 100, -Math.PI / 2, -Math.PI / 2 + n * rad, false);
  context.stroke();
  context.restore();
}

//繪制白色外圈
function whiteCircle() {
  context.save();
  context.beginPath();
  context.strokeStyle = "#A5DEF1";
  context.lineWidth = 12;
  context.arc(centerX, centerY, 100, 0, Math.PI * 2, false);
  context.stroke();
  context.closePath();
  context.restore();
}

//百分比文字繪制
function text(n) {
  context.save();
  context.fillStyle = "#F47C7C";
  context.font = "40px Arial";
  context.textAlign = "center";
  context.textBaseline = "middle";
  context.fillText(n.toFixed(0) + "%", centerX, centerY);
  context.restore();
}

//動(dòng)畫循環(huán)
(function drawFrame() {
  window.requestAnimationFrame(drawFrame, canvas);
  context.clearRect(0, 0, canvas.width, canvas.height);

  whiteCircle();
  text(speed);
  blueCircle(speed);

  if (speed > 100) speed = 0;
  speed += 0.1;
}());
window.requestAnimationFrame(drawFrame, canvas);

每行代碼的注釋標(biāo)注非常清楚,如果還有不理解的可以去看canvas基礎(chǔ),應(yīng)該就可以了。

感謝各位的閱讀!關(guān)于“如何利用canvas實(shí)現(xiàn)環(huán)形進(jìn)度條”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI