一、效果图如下:
二、wxml
<view class='headpiece-time flex-row'><text class='headpiece-txt'>倒计时:</text><view class='headpiece-process'><view class='headpiece-process-inner' style="width:{{width}}%"></view></view><text class='headpiece-num'>{{t}}</text></view>
三、wxss
.headpiece-num {position: absolute;top: -3rpx;right: -35rpx;width: 62rpx;height: 100%;text-align: center;}.headpiece-time {position: relative;width: 305rpx;}.headpiece-process {position: relative;width: 138rpx;height: 14rpx;margin-right: 14rpx;border: 4rpx solid #000;overflow: hidden;background: #fff4b2;}.headpiece-process-inner {position: absolute;top: 0rpx;left: 0rpx;background: #f74242;height: 100%;transition: all 0.3s ease-out;}
四、index.js
/*** 获取系统信息*/getSystemInfo: function () {return new Promise((a, b) => {wx.getSystemInfo({success: function (res) {a(res)},fail: function (res) {b(res)}})})},/*** 进度条动画*/countdown: function () {const requestAnimationFrame = callback => {return setTimeout(callback, 1000 / 60);}, cancelAnimationFrame = id => {clearTimeout(id);};this.getSystemInfo().then(v => {let maxtime = this.data.maxtime,width = this.data.width,sTime = +new Date,_ts = this,temp,animate;(animate = () => {temp = requestAnimationFrame(() => {let time = maxtime * 1000,currentTime = +new Date,schedule = 1 - (currentTime - sTime) / time,schedule_1 = schedule <= 0 ? 0 : schedule,width = parseInt(schedule_1 * 100),t = parseInt((this.data.maxtime) * schedule_1)+1;_ts.setData({width: width,t:t});if (schedule <= 0) {cancelAnimationFrame(temp);_ts.setData({width: width,t: 0});return;} else {animate();};})})();});},
