index.js

import Canvas from '../../utils/canvas.js'
Page({
...Canvas.options,
/**
* 页面的初始数据
*/
data: {
...Canvas.data,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var _this=this;
// setTimeout(function(){

// },1000)

},
start: function (event){
this.draw('runCanvas', 9, 1000);
},
stop: function (event){
this.stoppp();
}
})

index.xml

<view class='canvasBox'>
<view class='bigCircle'></view>
<view class='littleCircle'></view>
<canvas canvas-id="runCanvas" id="runCanvas" class='canvas'></canvas>

<view bindtap='start'>
开始
</view>
<view bindtap='stop'>
停止
</view>
</view>

canvas.js

export default {
data: {
percentage: '', //百分比
animTime: '', // 动画执行时间
time:null
},
options: {
// 绘制圆形进度条方法

run(c, w, h) {
let that = this;
let hs=0;
let timer = null;

var num = (2 * Math.PI / 100 * c) - 0.5 * Math.PI;
var bottomC = Math.PI;
that.data.ctx2.arc(w, h, w - 8, 0.8 * Math.PI, num-1.9)
that.data.ctx2.setStrokeStyle("#ff5000");
that.data.ctx2.setLineWidth("16");
that.data.ctx2.setLineCap("butt");
that.data.ctx2.stroke();
that.data.ctx2.beginPath();
that.data.ctx2.setFontSize(40); //注意不要加引号
that.data.ctx2.setFillStyle("#fff000");
that.data.ctx2.setTextAlign("center");
that.data.ctx2.setTextBaseline("middle");

var mess = '';
if (c < 10) {
c = '0:' + '0' + c
} else {
c = '0:' + c
}

that.data.ctx2.fillText(c , w, h);
that.data.ctx2.draw();
},
/**
* start 起始百分比
* end 结束百分比
* w,h 其实就是圆心横纵坐标
*/
// 动画效果实现
canvasTap(start, end, time, w, h) {
var that = this;
clearInterval(that.data.time);

that.data.time=setInterval(function(){
that.canvasTap(start, end, time, w, h);
that.run(start, w, h);
},1000)

start++;
console.log('start' + start)
if (start > 60) {
clearInterval(that.data.time);
return false;
}

},
/**
* id----------------canvas画板id
* percent-----------进度条百分比
* time--------------画图动画执行的时间
*/
draw: function (id, percent, animTime) {
var that = this;
const ctx2 = wx.createCanvasContext(id);
that.setData({
ctx2: ctx2,
percentage: percent,
animTime: animTime
});
var time = that.data.animTime / that.data.percentage;
wx.createSelectorQuery().select('#' + id).boundingClientRect(function (rect) { //监听canvas的宽高
var w = parseInt(rect.width / 2); //获取canvas宽的的一半
var h = parseInt(rect.height / 2); //获取canvas高的一半,
that.canvasTap(0, that.data.percentage, time, w, h)
}).exec();
},
stoppp:function(event){
var that=this;
clearInterval(that.data.time);
}
}
}

微信小程序canvas实现圆形计时器功能的更多相关文章

  1. 原创:WeZRender:微信小程序Canvas增强组件

    WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...

  2. 微信小程序--canvas画布实现图片的编辑

    技术:微信小程序   概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...

  3. 微信小程序动画之圆形进度条

    微信小程序动画之圆形进度条 上图: js: //获取应用实例 var app = getApp() var interval; var varName; var ctx = wx.createCanv ...

  4. 技术博客--微信小程序canvas实现图片编辑

    技术博客--微信小程序canvas实现图片编辑 我们的这个小程序不仅仅是想给用户提供一个保存和查找的平台,还希望能给用户一个展示自己创意的舞台,因此我们实现了图片的编辑部分.我们对对图片的编辑集成了很 ...

  5. 记录使用微信小程序的NFC和蓝牙功能读取15693芯片的开发历程

    开发目标: (1) 对于Android手机,直接通过微信小程序调用手机的NFC功能,对15693协议的芯片进行读写操作: (2)对于苹果手机(及没有NFC模块的手机),通过微信小程序的蓝牙功能连接到蓝 ...

  6. 微信小程序-canvas绘制文字实现自动换行

    在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生一定的了问题.如果我们绘制的文本长度不确定或者 ...

  7. 微信小程序 canvas 字体自动换行(支持换行符)

    微信小程序 canvas 自动适配 自动换行,保存图片分享到朋友圈  https://github.com/richard1015/News 微信IDE演示代码https://developers.w ...

  8. 基于微信小程序的用户列表点赞功能

    代码地址如下:http://www.demodashi.com/demo/13997.html 一.前言 (1).适合人群 1.微信小程序开发者 2.前端工程师 3.想入门学习小程序开发的人员 4.想 ...

  9. 微信小程序canvas生成并保存图片

    ---恢复内容开始--- 微信小程序canvas生成并保存图片,具体实现效果如下图     实现效果需要做以下几步工作 一.先获取用户屏幕大小,然后才能根据屏幕大小来定义canvas的大小 二.获取图 ...

随机推荐

  1. [Xcode 实际操作]九、实用进阶-(11)系统本地通知的创建和使用

    目录:[Swift]Xcode实际操作 本文将演示系统本地通知的创建和使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //引入需要 ...

  2. 【UVA - 10815】Andy's First Dictionary (set)

    Andy's First Dictionary Description 不提英文了 直接上中文大意吧 XY学长刚刚立下了再不过CET就直播xx的flag,为了不真的开启直播模式,XY学长决定好好学习英 ...

  3. properties 文件注意事项

    不要使用""双引号包裹内容 db.validationQuery="select 1"比如上面这种是错误的,下面的是正确的写法 db.validationQue ...

  4. DISTINCT 去重---SQL

    SQL SELECT DISTINCT 语句 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值. DISTINCT 关键词用于返回唯一不同的值. SQL SELE ...

  5. 082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II

    给定一个有序的链表,删除所有有重复数字的节点,只保留原始列表中唯一的数字.例如:给定 1->2->3->3->4->4->5 ,则返回 1->2->5给 ...

  6. DB2中横表纵表互换

    1.列转行:创建一个如下的表drop table dwtmp.tmp_xn_lsb; create table dwtmp.tmp_xn_lsb ( year      int ,quarter   ...

  7. MVC系列学习(十六)-区域的学习

    1.查找控制器的过程 1.1调用其他项目中的控制器 a.先到网站根目录下的bin文件夹下,遍历所有的程序集 b.找到以Controller结尾的类 c.再找出其中继承了Controller的类 d.接 ...

  8. JQueryUI基础知识学习

    JQueryUI官网 http://jqueryui.com/ 菜鸟教程 http://www.runoob.com/jqueryui/jqueryui-tutorial.html

  9. 解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

    利用Itext可以实现pdf的高效动态生成,但在实践过程中遇到了一个问题: 即itext利用map中的值设置到pdf模板上建立的文本域中时:能成功生成,但是在部分浏览器上(360,QQ,等浏览器)无法 ...

  10. 8、二进制中1的个数------------>剑指offer系列

    题目 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 法一:分析 这是一道考察二进制的题目 二进制或运算符(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1. 二进制 ...