效果:

html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>digit</title>
</head>
<body>
<canvas id="canvas"></canvas>
<script src="digit_1.js"></script>
<script src="countdown.js"></script>
</body>
</html>

countdown.js:

var WINDOW_WIDTH = 1024;
var WINDOW_HEIGHT = 768;
var RADIUS = 8;
var MARGIN_TOP = 60;
var MARGIN_LEFT = 30; const endTime = new Date(2017,8,17,18,30,00);//const声明变量,不可修改,必须声明时赋值;
var curShowTimeSeconds = 0; window.onload = function () { var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d"); canvas.width = WINDOW_WIDTH;
canvas.height = WINDOW_HEIGHT; curShowTimeSeconds = getCurrentShowTimeSeconds();
setInterval(
function () {
update();
render(context);
},50) }; function getCurrentShowTimeSeconds() {
var curTime = new Date();//获取目前时间;
var ret = endTime.getTime()-curTime.getTime();
ret = Math.round(ret/1000);//获取秒数差值;
return ret>=0?ret:0;
} function update() { var nextShowTimeSeconds = getCurrentShowTimeSeconds(); var nextHours = parseInt(nextShowTimeSeconds/3600);
var nextMinutes = parseInt((nextShowTimeSeconds-nextHours*3600)/60);
var nextSeconds = nextShowTimeSeconds%60; var curHours = parseInt(curShowTimeSeconds/3600);
var curMinutes = parseInt((curShowTimeSeconds-curHours*3600)/60);
var curSeconds = curShowTimeSeconds%60; if(nextSeconds!=curSeconds){
curShowTimeSeconds = nextShowTimeSeconds;
}
}
function render(cxt) {
//每一帧都要对动画进行刷新,不然就会新的旧的叠在一起;
cxt.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);//对一个矩形空间里的动画进行刷新; var hours = parseInt(curShowTimeSeconds/3600);
var minutes = parseInt((curShowTimeSeconds-hours*3600)/60);
var seconds = curShowTimeSeconds%60; renderDigit(MARGIN_LEFT,MARGIN_TOP,parseInt(hours/10),cxt);
renderDigit(MARGIN_LEFT+15*(RADIUS+1),MARGIN_TOP,parseInt(hours%10),cxt);
renderDigit(MARGIN_LEFT+30*(RADIUS+1),MARGIN_TOP,10,cxt);
renderDigit(MARGIN_LEFT+39*(RADIUS+1),MARGIN_TOP,parseInt(minutes/10),cxt);
renderDigit(MARGIN_LEFT+54*(RADIUS+1),MARGIN_TOP,parseInt(minutes%10),cxt);
renderDigit(MARGIN_LEFT+69*(RADIUS+1),MARGIN_TOP,10,cxt);
renderDigit(MARGIN_LEFT+78*(RADIUS+1),MARGIN_TOP,parseInt(seconds/10),cxt);
renderDigit(MARGIN_LEFT+93*(RADIUS+1),MARGIN_TOP,parseInt(seconds%10),cxt);
} function renderDigit(x,y,num,cxt) { cxt.fillStyle = "rgb(0,102,153)"; for(var i=0;i<digit[num].length;i++){//数组行
for(var j=0;j<digit[num][i].length;j++){//数组列
if(digit[num][i][j] == 1){
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();
}
}
}
}

最新文章

  1. Form Builder的三种查询方法构建
  2. PHP封装
  3. 关于MySql 关键字与字段名冲突 的问题
  4. mysql重点--正确使用
  5. Windows 10简体中文最新预览版Build 9926
  6. linux命令行下导出导入.sql文件
  7. mvc5 + ef6 + autofac搭建项目(三)
  8. php代码常见错误详解整理
  9. python3学习笔记13(数据结构)
  10. python中无法被转化为set的list[list组成的list]
  11. .NET成年了,然后呢?
  12. github 学习心得
  13. Bus Blaster v4 design overview
  14. 关于android studio 出现Error:Execution failed for task &#39;:app:preDebugAndroidTestBuild&#39;. 的解决办法
  15. &amp;与&amp;&amp;, |与||区别
  16. 转载:理解RESTful架构
  17. 【VUE】Mac下vue 开发环境搭建,以及目录结构
  18. RESTful概念理解
  19. UVA.11300 Spreading the Wealth (思维题 中位数模型)
  20. ExtGridReturn ,存放ext的实体类集合和总数

热门文章

  1. get all sites under IIS
  2. codeforces 673C C. Bear and Colors(暴力)
  3. [Selenium] common functions comparison
  4. GCD基础知识
  5. 「LuoguP4753」濑 River Jumping(贪心
  6. mongoDB的复制集5----复制集安全(认证,用户,权限)
  7. HNOI2017 day1 T2 影魔
  8. unittest参数化parameterized
  9. bzoj2839
  10. 【旧文章搬运】Windows内核常见数据结构(线程相关)