[js高手之路] html5 canvas教程 - 制作一个数码倒计时效果
效果图:
这个实例主要注意:
1,剩余时间的计算
2,每个时间数字的绘制
时间主要有0-9和一个冒号组成,用数组来表示( 0: 就是不画圆,1:就是画一个蓝色的圆 )
num.js文件:
- var digital =
- [
- [
- [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,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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [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]
- ],//
- [
- [0,0,0,0],
- [0,0,0,0],
- [0,1,1,0],
- [0,1,1,0],
- [0,0,0,0],
- [0,0,0,0],
- [0,1,1,0],
- [0,1,1,0],
- [0,0,0,0],
- [0,0,0,0]
- ]//:
- ];
倒计时实现:
- <head>
- <meta charset='utf-8' />
- <style>
- #canvas {
- border: 1px dashed #aaa;
- }
- </style>
- <script src="./num.js"></script>
- <script>
- window.onload = function () {
- var oCanvas = document.querySelector("#canvas"),
- oGc = oCanvas.getContext('2d'),
- width = oCanvas.width, height = oCanvas.height,
- radius = 10,
- leftTime = 0,
- endTime = new Date( 2017, 09, 10, 15, 30, 02 );
- leftTime = getLeftTime();
- showTime( oGc );
- setInterval(function(){
- oGc.clearRect( 0, 0, width, height );
- leftTime = getLeftTime();
- showTime( oGc );
- }, 1000);
- function showTime( cxt ){
- var hour = parseInt( leftTime / 3600 );
- var min = parseInt( ( leftTime - hour * 3600 ) / 60 );
- var sec = leftTime % 60;
- showNum( 0, 0, parseInt( hour / 10 ), cxt );
- showNum( 15 * ( radius + 1 ), 0, parseInt( hour % 10 ), cxt );
- showNum( 30 * ( radius + 1 ), 0, 10, cxt );
- showNum( 39 * ( radius + 1 ), 0, parseInt( min / 10 ), cxt );
- showNum( 54 * ( radius + 1 ), 0, parseInt( min % 10 ), cxt );
- showNum( 69 * ( radius + 1 ), 0, 10, cxt );
- showNum( 78 * ( radius + 1 ), 0, parseInt( sec / 10 ), cxt );
- showNum( 93 * ( radius + 1 ), 0, parseInt( sec % 10 ), cxt );
- }
- function getLeftTime(){
- var curTime = new Date();
- var restTime = endTime.getTime() - curTime.getTime();
- restTime = Math.round( restTime / 1000 );
- return restTime > 0 ? restTime : 0;
- }
- //显示时间的每一位
- function showNum( x, y, num, cxt ){
- cxt.fillStyle = '#09f';
- for( var i = 0; i < digital[num].length; i++ ){
- for( var j = 0; j < digital[num][i].length; j++ ){
- if ( digital[num][i][j] == 1 ){
- cxt.beginPath();
- cxt.arc( x + j * 2 * ( radius + 1 ) + ( radius + 1 ), y + i * 2 * ( radius + 1 ) + ( radius + 1 ), radius, 0, + 360 * Math.PI / 180, false );
- cxt.closePath();
- cxt.fill();
- }
- }
- }
- }
- }
- </script>
- </head>
- <body>
- <canvas id="canvas" width="1200" height="300"></canvas>
- </body>
<meta charset='utf-8' />
<style>
#canvas {
border: 1px dashed #aaa;
}
</style>
<script>
var digital =
[
[
[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
[
[0,0,0,0],
[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0],
[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0],
[0,0,0,0]
]//:
];
</script>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'),
width = oCanvas.width, height = oCanvas.height,
radius = 10,
leftTime = 0,
endTime = new Date( 2017, 09, 10, 15, 30, 02 );
leftTime = getLeftTime();
showTime( oGc );
setInterval(function(){
oGc.clearRect( 0, 0, width, height );
leftTime = getLeftTime();
showTime( oGc );
}, 1000);
function showTime( cxt ){
var hour = parseInt( leftTime / 3600 );
var min = parseInt( ( leftTime - hour * 3600 ) / 60 );
var sec = leftTime % 60;
showNum( 0, 0, parseInt( hour / 10 ), cxt );
showNum( 15 * ( radius + 1 ), 0, parseInt( hour % 10 ), cxt );
showNum( 30 * ( radius + 1 ), 0, 10, cxt );
showNum( 39 * ( radius + 1 ), 0, parseInt( min / 10 ), cxt );
showNum( 54 * ( radius + 1 ), 0, parseInt( min % 10 ), cxt );
showNum( 69 * ( radius + 1 ), 0, 10, cxt );
showNum( 78 * ( radius + 1 ), 0, parseInt( sec / 10 ), cxt );
showNum( 93 * ( radius + 1 ), 0, parseInt( sec % 10 ), cxt );
}
function getLeftTime(){
var curTime = new Date();
var restTime = endTime.getTime() - curTime.getTime();
restTime = Math.round( restTime / 1000 );
return restTime > 0 ? restTime : 0;
}
//显示时间的每一位
function showNum( x, y, num, cxt ){
cxt.fillStyle = '#09f';
for( var i = 0; i < digital[num].length; i++ ){
for( var j = 0; j < digital[num][i].length; j++ ){
if ( digital[num][i][j] == 1 ){
cxt.beginPath();
cxt.arc( x + j * 2 * ( radius + 1 ) + ( radius + 1 ), y + i * 2 * ( radius + 1 ) + ( radius + 1 ), radius, 0, + 360 * Math.PI / 180, false );
cxt.closePath();
cxt.fill();
}
}
}
}
}
</script>
</head>
<body>
<canvas id="canvas" width="1200" height="300"></canvas>
</body>
run code
[js高手之路] html5 canvas教程 - 制作一个数码倒计时效果的更多相关文章
- [js高手之路] html5 canvas教程 - 绘制七巧板
七巧板长什么样? 用canvas把他画出来,其实就是把这7个区域的图形,每个点的坐标找出来,再用moveTo, lineTo连线,设置不同的颜色即可. <head> <meta ch ...
- [js高手之路]html5 canvas教程 - 1px问题以及绘制坐标系网格
在canvas中,要画出1px的线条,默认情况下是不行的 context.beginPath(); context.moveTo( 100, 100 ); context.lineTo( 400, 1 ...
- [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API
我们接着上文[js高手之路] html5 canvase系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...
- [js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)
之前,我写了一个arc函数的用法:[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形). arcTo: cxt.arcTo( cx, cy, x2, y2, ...
- [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)
绘制曲线,经常会用到路径的知识,如果你对路径有疑问,可以参考我的这篇文章[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解. arc:画 ...
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
接着上文[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)继续,本文介绍的 ...
- [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)
接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...
- [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)
上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置 lineWidth: 设置线条的宽 ...
- [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)
接着上文[js高手之路] html5 canvas系列教程 - 状态详解(save与restore),相信大家都应该玩过美颜功能,而我们今天要讲的就是canvas强大的像素处理能力,通过像素处理,实现 ...
随机推荐
- Jsoup(一)Jsoup详解(官方)
一.Jsoup概述 1.1.简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API, 可通过DOM,CSS以及类似于jQu ...
- Effective Java 第三版——2. 当构造方法参数过多时使用builder模式
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- 自学OpenCV时遇到的一些错误(捂脸ing,当年确实好多不懂...)
6.8/14 opencv环境配置好了, 属性也设置对了, 但是使用VideoCapture类的时候, 还是出错. 右键可以查看其定义, 但是就是 出错. 漏掉了#include "s ...
- Docker 运行Tensorboard 和 jupyter的正确方法
Docker 运行Tensorboard 和 jupyter的正确方法 网上找了很多方法都是jupyter 运行正常但不知道如何打开Tensorboard.折腾了很久,实验很多中方法最终找到了一个正确 ...
- Linux高性能server编程——信号及应用
信号 信号是由用户.系统或者进程发送给目标进程的信息.以通知目标进程某个状态的改变或系统异常. Linux信号可由例如以下条件产生: 对于前台进程.用户能够通过输入特殊的终端字符来给它发送信号. ...
- HVR又一次load的时候须要将schedule suspend掉
今天在进行HVR的又一次load的时候.报错了: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fi ...
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...
- tools: idea 2017 激活
1.下载并安装ideaIU (https://www.jetbrains.com/idea/download/#section=windows ,下载Ultimate版)2.下载 JetbrainsC ...
- 【转载】解决refreshing gradle project 和Building gradle project info 一直卡住\速度慢
转载: http://blog.csdn.net/xx326664162/article/details/52002616 文章出自:薛瑄的博客 分析原因: 更改Gradle的版本后,或者更新AS后, ...
- 关于Idea中右边的maven projects窗口找不到了如何调出来
关于Idea中右边的maven projects窗口找不到了如何调出来? 具体的idea版本我不太清楚,我用的是2016版,其他版本应该也是一样的. 首先idea自带了maven控件,不像Eclip ...