canvas基础绘制-倒计时(上)
2024-08-30 14:13:25
效果:
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();
}
}
}
}
最新文章
- Form Builder的三种查询方法构建
- PHP封装
- 关于MySql 关键字与字段名冲突 的问题
- mysql重点--正确使用
- Windows 10简体中文最新预览版Build 9926
- linux命令行下导出导入.sql文件
- mvc5 + ef6 + autofac搭建项目(三)
- php代码常见错误详解整理
- python3学习笔记13(数据结构)
- python中无法被转化为set的list[list组成的list]
- .NET成年了,然后呢?
- github 学习心得
- Bus Blaster v4 design overview
- 关于android studio 出现Error:Execution failed for task &#39;:app:preDebugAndroidTestBuild&#39;. 的解决办法
- &;与&;&;, |与||区别
- 转载:理解RESTful架构
- 【VUE】Mac下vue 开发环境搭建,以及目录结构
- RESTful概念理解
- UVA.11300 Spreading the Wealth (思维题 中位数模型)
- ExtGridReturn ,存放ext的实体类集合和总数
热门文章
- get all sites under IIS
- codeforces 673C C. Bear and Colors(暴力)
- [Selenium] common functions comparison
- GCD基础知识
- 「LuoguP4753」濑 River Jumping(贪心
- mongoDB的复制集5----复制集安全(认证,用户,权限)
- HNOI2017 day1 T2 影魔
- unittest参数化parameterized
- bzoj2839
- 【旧文章搬运】Windows内核常见数据结构(线程相关)