Html5 canvas实现粒子时钟的示例代码


Posted in HTML / CSS onSeptember 06, 2018

我们先看看粒子时钟的效果,如下:

Html5 canvas实现粒子时钟的示例代码

下面我们将通过canvas和js实现,

首先要创建一个html文件并添加一个canvas画布,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .container{
            margin: 0, auto;
            width: 600px;
            
        }
    </style>
</head>
<body>
    <div id="container">
        <canvas id="canvas"></canvas>
    </div>
</body>

下面导入素材,digit.js,素材中通过二维数组拼成一个个数字,共有:0-9和冒号,十个字符,如下:

Html5 canvas实现粒子时钟的示例代码

可以看到为1的字符组成了

下面开始创建画布:

function Clock() {
        var canvas = document.getElementById("canvas");
        canvas.width = 600;
        canvas.height = 100;
        this.cxt = canvas.getContext('2d');
        this.cxt.fillStyle="#ddd";
        this.cxt.fillRect(0, 0, 500, 100);
    }

上面的代码就可以在浏览器画一个小灰色画布了

下面我们开始分析:

1.了解数据矩阵?就是多维数组

2.如何画圆?

2.1要先知道半径?

Html5 canvas实现粒子时钟的示例代码

由上图得知,圆心的位置依次为:

r+1
r+1 + (r+1)*2*1
r+1 + (r+1)*2*2
。。。
r+1 + (r+1)*2*i

同时,也可以通过计算圆的高度,得到半径,如下:

一个圆的高度是(r+1)*2,画布高度是由10个圆组成

canvasHeight = (r+1)*2*10

若将画布高度设为100,则r就出来了,圆心xy也出来了,开始画圆了
先要在上面的Clock对象中加一条语句,计算r

this.r = 100/20-1;

下面我在Clock的原型上加上draw方法

Clock.prototype.draw = function(num, index) {
        this.cxt.fillStyle="#000";
        for (let i=0; i<digit[num].length; i++) {
            for (let j=0; j<digit[num][i].length; j++) {
                if (digit[num][i][j] == 1) {
                    this.cxt.beginPath();
                    this.cxt.arc(index*70+(this.r+1)+(this.r+1)*2*j, (this.r+1)+(this.r+1)*2*i, this.r, 0, Math.PI*2, false);
                    this.cxt.closePath();
                    this.cxt.fill();
                }
            }
        }
    }

draw接收2个参数,第一个是字符索引,第二个是字符偏移顺序,70就是一个偏移距离,可以自定。
第一个for,拿到要渲染的字符数组,第二个for,取每一行进行渲染且只渲染为1的,画圆的参数主要是x,y,r

下面就要得到时间,我们可以直接从new Date中用正则取时间,如下:

Clock.prototype.getTime = function() {
        var reg = /(\d)(\d):(\d)(\d):(\d)(\d)/.exec(new Date());
        var data = [];
        data.push(reg[1], reg[2], 10, reg[3], reg[4], 10, reg[5], reg[6]);
        for (var i=0; i<data.length; i++) {
            this.draw(data[i], i);
        }
    }

通过正则可以方便的取到时分秒,在push数组时注意格式对应,其中10表示digit.js中的第10位字符,即冒号
注意 这样画会有问题,即画布不能刷新,可以加上这个

canvas.height= 100

下面可以运行代码了,如下:

var clock = new Clock();
setInterval(()=>{
        clock.getTime();
    })

好了,这样就ok了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
学做Bootstrap的第一个页面
May 15 HTML / CSS
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
Sep 02 HTML / CSS
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
Sep 15 HTML / CSS
浅谈CSS3 box-sizing 属性 有趣的盒模型
Apr 02 HTML / CSS
使用CSS实现弹性视频html5案例实践
Dec 26 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
Jan 04 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
May 23 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
Mar 04 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
Jul 03 HTML / CSS
AmazeUI 等分网格的实现示例
Aug 25 HTML / CSS
div与span之间的区别与使用介绍
Dec 06 HTML / CSS
HTML实现仿Windows桌面主题特效的实现
Jun 28 HTML / CSS
canvas离屏技术与放大镜实现代码示例
Aug 31 #HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
Aug 29 #HTML / CSS
使用canvas对多图片拼合并导出图片的方法
Aug 28 #HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
Aug 28 #HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
Aug 27 #HTML / CSS
html5中audio支持音频格式的解决方法
Aug 24 #HTML / CSS
HTML5实现音频和视频嵌入的方法
Aug 22 #HTML / CSS
You might like
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
实例介绍Python中整型
2019/02/11 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python小程序实现刷票功能详解
2019/07/17 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python字符串的拼接方法总结
2019/11/18 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
教师自我鉴定范文
2013/11/10 职场文书
超市端午节活动方案
2014/01/23 职场文书
农民工创业典型事迹
2014/01/25 职场文书
理发店策划方案
2014/06/05 职场文书
励志演讲稿500字
2014/08/21 职场文书
留学推荐信英文范文
2015/03/26 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
MySQL 如何限制一张表的记录数
2021/09/14 MySQL