看着小程序这些日子这么火爆,对于新鲜事物炒鸡感兴趣的我确定也小小的研究了一下。因而乎便搞出了一个小程序版本的倒计时Demo。Demo效果图以下:
javascript
1、Demo思路来源html
之因此写了这样一个Demo,是由于好久以前在慕课网看到了一个很好玩很酷炫利用canvas绘制的时钟,因而想着这样炫酷好玩的东西在小程序当中是否也可以得以实现呢?答案确定是能够的。接下来我将把这个Demo的思路一步一步分享给你们。前端
2、Demo实现java
1.微信小程序开发环境搭建 http://www.helloxcx.com/jc/devtools/download.htmlgit
2.开发环境搭建后利用开发工具建立本身的Demo项目github
1)建立项目canvas
2)添加核心代码countdown.js ,digit.js到index目录下
3.核心代码实现(代码中有详细的开发注释)小程序
1)digit.js(这里实现倒计时数字的排列,是一个3维数组)微信小程序
// 数字排列 var digit = [ [ [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,1,1,0,0] ],//0 [ [0,0,0,1,1,0,0], [0,1,1,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [1,1,1,1,1,1,1] ],//1 [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,1,1,0,0,0], [0,1,1,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,1,1], [1,1,1,1,1,1,1] ],//2 [ [1,1,1,1,1,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,1,1,1,0,0], [0,0,0,0,1,1,0], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0] ],//3 [ [0,0,0,0,1,1,0], [0,0,0,1,1,1,0], [0,0,1,1,1,1,0], [0,1,1,0,1,1,0], [1,1,0,0,1,1,0], [1,1,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,1,1,1,1] ],//4 [ [1,1,1,1,1,1,1], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0] ],//5 [ [0,0,0,0,1,1,0], [0,0,1,1,0,0,0], [0,1,1,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0] ],//6 [ [1,1,1,1,1,1,1], [1,1,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0] ],//7 [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0] ],//8 [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,1,1,0,0,0,0] ]//9 ]; module.exports = { digit : digit }
2)countdown.js(这里实现倒计时数字的绘图以及倒计时)数组
var sort = require("./digit.js") , digit = sort.digit; // 接收数字排列数组 var CANVAS_WIDTH = 375 // canvas宽度 , CANVAS_HEIGHT = 500 // canvas高度 , RADIUS = 8 // 小球半径 , MARGIN_TOP = 60 // 图例距离右边距离 , MARGIN_LEFT = 60; // 图例距离左边距离 /** * [render 数字渲染] * @param {[type]} time [倒计时时间] * @param {[type]} cxt [绘制对象] */ function render(time,cxt){ cxt.clearRect(0,0,CANVAS_WIDTH,CANVAS_HEIGHT); renderDigit(MARGIN_LEFT , MARGIN_TOP , parseInt(time/10) , cxt ); renderDigit(MARGIN_LEFT + 15*(RADIUS+1) , MARGIN_TOP , parseInt(time%10) , cxt ); } /** * [renderDigit 单独小球的绘制] * @param {[type]} x [每一个小球x轴距离] * @param {[type]} y [每一个小球y轴距离] * @param {[type]} num [须要绘制出来的数字] * @param {[type]} cxt [绘制对象] */ function renderDigit(x,y,num,cxt){ for(var i=0;i<digit[num].length;i++){ for(var j=0;j<digit[num][i].length;j++){ if (digit[num][i][j]){ cxt.beginPath(); cxt.arc(x+j*2*(RADIUS+1)+(RADIUS+1) , y+i*2*(RADIUS+1)+(RADIUS+1) , RADIUS , 0 ,2*Math.PI); cxt.closePath(); cxt.fill(); } } } } /** * [loopTime 倒计时绘图] * @param {[type]} time [倒计时须要绘制的数字] * @param {[type]} cxt [绘制对象] */ function loopTime(time,cxt){ render(time,cxt); // 获取当前context上存储的绘图动做 wx.drawCanvas({ canvasId:"canvas", actions:cxt.getActions() }); } /** * [init 倒计时实现] * @param {[type]} time [倒计时须要绘制的数字] * @param {[type]} cxt [绘制对象] */ function init(time,cxt){ loopTime(time,cxt) var loop = setInterval(function(){ time--; (time < 1 ) && ( clearInterval(loop) ) loopTime(time,cxt) },1000); } // 将init方法暴露出去 module.exports = { render:render, init:init }
3)index.js
// index.js // 引用倒计时方法 var countdown = require("./countdown.js"); Page({ data: {}, onReady:function(e){ var context = wx.createContext() // 经过小程序提供的接口建立并返回绘图上下文context对象 , loopTime = 60; // 设置倒计时的时间 // 启动倒计时 countdown.init(loopTime,context); } })
3、Demo源码
源码已托管github,地址为:https://github.com/xuqiang521/Wechat (求star,求watch)
好了,若是你搭建好了小程序开发环境,下载好了源码,那么赶忙去尝试一下小程序带来的快感吧!若是喜欢记得给赞哦😏!
鄙人公众号:qiangdada 我会在公众号不按期推送一些有关前端以及小程序的知识点!
最后,如若哪里有问题,还请轻喷,可是欢迎指出你们一块儿交流(*^__^*) !