微信小程序答题倒计时
白面葫芦娃·煎饼 人气:0想做一个答题的计时器效果,本文为大家分享了微信小程序实现答题倒计时的具体代码,供大家参考,具体内容如下
思路
利用canvas不停的画弧线
效果
代码
wxml
<view class='container'> <view class="bg"> {{stepText}}s </view> <canvas class='bgCanvas' canvas-id='bgCanvas'></canvas> </view> <button bindtap='clickStartBtn'>开始倒计时</button> <button bindtap='reStartBtn'>重置</button>
wxss
.container{ /**background-color: wheat;*/ width:100%; height:100px; position: relative; padding:0 0; margin:10rpx; background-color: rgb(27, 122, 167); display: flex; flex-direction: column; align-items: center; justify-content: center; } .bg{ border-radius: 50%; border: 6rpx solid #DCDCDC; width: 120rpx; height: 120rpx; text-align: center; line-height: 135rpx; color: white; } .bgCanvas{ width:200rpx; height:200rpx; margin: 0 auto; position: absolute; } .stepText{ /**font-weight: bold;*/ font-size: 60rpx; color: white; margin-top: 50rpx; }
js
const ctx = wx.createCanvasContext("bgCanvas") Page({ /** * 页面的初始数据 */ data: { stepText: 5 //设置倒计时初始值 }, getCircle: function(num) { //开始创建一个路径,需要调用fill或者stroke才会使用路径进行填充或描边。 //begin another path ctx.beginPath() //设置线条端点样式 半圆 不然默认是一条线 ctx.setLineCap('round') ctx.setLineWidth(6) // 起始弧度 12点钟 ctx.arc(50, 50, 31, 1.5 * Math.PI, num * Math.PI, true) ctx.setStrokeStyle('#00E5EE') //画出淡蓝色的内圈 ctx.stroke() //告诉<canvas/>组件你要将刚刚的描述绘制上去 ctx.draw() }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { /**设置线条宽度 ctx.setLineWidth(7) //画一条弧线 圆的x坐标 y坐标 圆的半径 起始弧度,单位弧度(在3点钟方向) 终止弧度 ctx.arc(50, 50, 35, 0, 2 * Math.PI, false) //设置线条样式 设置边框颜色。 ctx.setStrokeStyle("#F5F5F5") //画出当前路径的边框。 对当前路径进行描边 白色背景圆边 ctx.stroke()*/ this.getCircle(-0.5); }, reStartBtn: function(){ this.getCircle(-0.5); this.setData({ stepText:5 }) }, //点击开始倒计时按钮 clickStartBtn: function () { var that = this //定义倒计时 var step = that.data.stepText; var timer; clearInterval(timer); //从12点 开始绘制 var num = -0.5; //每次绘制添加的角度 0.04 一个圆 是 2*Math.PI 5秒要跑50次 //2/50 就是每次要增加的角度 var decNum = 2 / step / 10 //可按照指定的周期(以毫秒计)来调用函数 每1毫秒画一次 //定时器 timer= setInterval(function () { that.setData({ stepText: parseInt(step)//去掉小数保留整数 }) //toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。 //每执行一次 都减去100毫秒 0.1s 更新圆框中间的秒 step = (step - 0.1).toFixed(1) // 概念就是 1.5 ---->1.5 num += decNum //重新绘制圆的终止节点 //num.toFixed(2)可以四舍五入,保留两位小数,但会转换为String类型 num = num.toFixed(2) num = parseFloat(num); if (num != 1.5) { that.getCircle(num); } else { ctx.draw() } if (step <= 0) { clearInterval(timer) //销毁定时器 } }, 100) // }, })
加载全部内容