本文主要和大家分享微信小程式實現圓形進度條實例,希望能幫助大家。
小程式中使用圓形倒數計時,效果圖:
##使用2個canvas 一個是背景圓環,一個是彩色圓環。
使用setInterval 讓彩色圓環逐步繪製。
解決方案
第一步先寫結構
一個盒子包裹2個canvas以及文字盒子;
盒子使用相對定位作為父級,flex佈局,設定居中;
一個canvas,使用絕對定位作為背景,canvas-id="canvasProgressbg"
另一個canvas,使用相對定位作為進度條,canvas-id="canvasProgress"
程式碼如下:
// wxml <view> <view> <canvas> </canvas> <canvas> </canvas> <view> <view></view> <text> {{progress_txt}}</text> </view> </view> </view>
// wxss .progress_box{ position: relative; width:220px; height: 220px; // 这里的宽高是必须大于等于canvas圆环的直径 否则绘制到盒子外面就看不见了 // 一开始设置 width:440rpx; height:440rpx; 发现 在360X640分辨率的设备,下绘制的圆环跑盒子外去了 // 小程序使用rpx单位适配 ,但是canvas绘制的是px单位的。所以只能用px单位绘制的圆环在盒子内显示 display: flex; align-items: center; justify-content: center; background-color: #eee; } .progress_bg{ position: absolute; width:220px; height: 220px; } .progress_canvas{ width:220px; height: 220px; } .progress_text{ position: absolute; display: flex; align-items: center; justify-content: center } .progress_info{ font-size: 36rpx; padding-left: 16rpx; letter-spacing: 2rpx } .progress_dot{ width:16rpx; height: 16rpx; border-radius: 50%; background-color: #fb9126; }
第二步驟資料綁定
從wxml中可以看到我們使用了一個資料progress_txt,所以在js中設定data如下:
data: { progress_txt: '正在匹配中...', },
第三步canvas繪製
敲黑板,劃重點
#1. 先繪製背景
在js中封裝一個畫圓環的函數drawProgressbg,canvas 畫圓
在onReady中執行這個函數;
drawProgressbg: function(){ // 使用 wx.createContext 获取绘图上下文 context var ctx = wx.createCanvasContext('canvasProgressbg') ctx.setLineWidth(4);// 设置圆环的宽度 ctx.setStrokeStyle('#20183b'); // 设置圆环的颜色 ctx.setLineCap('round') // 设置圆环端点的形状 ctx.beginPath();//开始一个新的路径 ctx.arc(110, 110, 100, 0, 2 * Math.PI, false); //设置一个原点(100,100),半径为90的圆的路径到当前路径 ctx.stroke();//对当前路径进行描边 ctx.draw(); }, onReady: function () { this.drawProgressbg(); },看一下效果如下:
- 在js中封裝一個畫圓環的函數drawCircle,
- 在onReady中執行這個函數;##
drawCircle: function (step){ var context = wx.createCanvasContext('canvasProgress'); // 设置渐变 var gradient = context.createLinearGradient(200, 100, 100, 200); gradient.addColorStop("0", "#2661DD"); gradient.addColorStop("0.5", "#40ED94"); gradient.addColorStop("1.0", "#5956CC"); context.setLineWidth(10); context.setStrokeStyle(gradient); context.setLineCap('round') context.beginPath(); // 参数step 为绘制的圆环周长,从0到2为一周 。 -Math.PI / 2 将起始角设在12点钟位置 ,结束角 通过改变 step 的值确定 context.arc(110, 110, 100, -Math.PI / 2, step * Math.PI - Math.PI / 2, false); context.stroke(); context.draw() }, onReady: function () { this.drawProgressbg(); this.drawCircle(2) },
this.drawCircle(1) 效果如下: | this.drawCircle(2) 效果如下: | |
![]() |
![]() |
![]() |
- #在js中的data設定一個計數器count,一個步驟step,一個定時器
- 在js中封裝一個計時器的函數countInterval,
- 在onReady中執行這個函數;
#
data: { progress_txt: '正在匹配中...', count:0, // 设置 计数器 初始为0 countTimer: null // 设置 定时器 初始为null }, countInterval: function () { // 设置倒计时 定时器 每100毫秒执行一次,计数器count+1 ,耗时6秒绘一圈 this.countTimer = setInterval(() => { if (this.data.count <br>最終效果<span class="img-wrap"><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/054/025/16596bd53660412feef9b46f649ce103-5.gif?x-oss-process=image/resize,p_40" class="lazy" alt="微信小程式實作圓形進度條實例分享" ></span><p></p>相關推薦:<p><a href="http://www.php.cn/css-tutorial-383392.html" target="_self"></a>實例講解canvas實作圓形進度條動畫</p> <p><a href="http://www.php.cn/xiaochengxu-378492.html" target="_self"></a>微信小程式實作圓形進度條方法介紹</p><p><a href="http://www.php.cn/xiaochengxu-367074.html" target="_self"></a>#有關圓形進度條基礎入門教學推薦</p><p class="article fmt article__content"><br></p><p class="comments-box-content"><br></p>####
以上是微信小程式實作圓形進度條實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載
最受歡迎的的開源編輯器