iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >如何用HTML5制作数字时钟
  • 201
分享到

如何用HTML5制作数字时钟

2024-04-02 19:04:59 201人浏览 泡泡鱼
摘要

本篇内容主要讲解“如何用HTML5制作数字时钟”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用html5制作数字时钟”吧! 复制代码 XML/HTML

本篇内容主要讲解“如何用HTML5制作数字时钟”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用html5制作数字时钟”吧!

复制代码

XML/HTML Code复制内容到剪贴板

var numData = [   

            "1111/1001/1001/1001/1001/1001/1111", //0   

            "0001/0001/0001/0001/0001/0001/0001", //1   

            "1111/0001/0001/1111/1000/1000/1111", //2   

            "1111/0001/0001/1111/0001/0001/1111", //3   

            "1010/1010/1010/1111/0010/0010/0010", //4   

            "1111/1000/1000/1111/0001/0001/1111", //5   

            "1111/1000/1000/1111/1001/1001/1111", //6   

            "1111/0001/0001/0001/0001/0001/0001", //7   

            "1111/1001/1001/1111/1001/1001/1111", //8   

            "1111/1001/1001/1111/0001/0001/1111", //9   

            "0000/0000/0010/0000/0010/0000/0000", //:   

        ]  

  0代表没像素,1代表有像素,/是为了更好看些,就是分行嘛,简单说起来:比如0就是:

XML/HTML Code复制内容到剪贴板

        1  1  1  1   

  1  0  0  1   

  1  0  0  1   

  1  0  0  1   

  1  0  0  1   

  1  0  0  1   

  1  1  1  1     

这样就很清楚了吧。从0到9还有一个:号都用字符串表示好。

  然后就写个粒子对象,也就是像素点:

XML/HTML Code复制内容到剪贴板

var P_radius = 8,Gravity = 9.8;   

        var Particle = function(){   

            this.x = 0;   

            this.y = 0;   

            this.vx = 0;   

            this.vy = 0;   

            this.color = "";   

            this.visible = false;   

            this.drop = false;   

        }   

        Particle.prototype = {   

            constructors:Particle,   

            paint:function(){        //绘制自身   

                ctx.fillStyle = this.color;   

                ctx.beginPath();   

                ctx.arc(this.x,this.y,P_radius,0,2*Math.PI);   

                ctx.fill();   

            },   

            reset:function(x,y,color){        //重置   

                this.x = x;   

                this.y = y;   

                this.vx = 0;   

                this.vy = 0;   

                this.color = color;   

                this.visible = true;   

                this.drop = false;   

            },   

            isDrop:function(){        //落下   

                this.drop = true;   

                var vx = Math.random()*20+15   

                this.vx = Math.random()>=0.5?-vx : vx;   

            },   

            update:function(time){        //每一帧的动作   

                if(this.drop){   

                    this.x += this.vx*time;   

                    this.y += this.vy*time;   

                    var vy = this.vy+Gravity*time;   

                    if(this.y>=canvas.height-P_radius){   

                        this.y = canvas.height-P_radius   

                        vy = -vy*0.7;   

                    }   

                    this.vy = vy;   

                    if(this.x<-P_radius||this.x>canvas.width+P_radius||this.y<-P_radius||this.y>canvas.height+P_radius){   

                        this.visible = false;   

                    }   

                }   

            }   

        }     

粒子对象的属性比较简单,就位置,速度,以及是否可视化。方法的话,paint是绘制方法,reset是重置(因为粒子要循环利用的,提升性能),isDrop是粒子落下方法,update就是每一帧更新粒子的动作,update中当粒子运动超出canvas的绘制区域时,就把它的可视化置为false,在粒子容器中保存起来等待下一次调用。

  写好粒子对象后,就要考虑如何让粒子按照位置画上去,同时当粒子不需要用时能够让他做自由落体的动画了。

  先画背景(也就是那没有像素的白点):

XML/HTML Code复制内容到剪贴板

function drawBg(){   

            var tx = (canvas.width-((P_radius*2+X_J)*4*8+7*xjg))/2;   

            for(var i=0;i<8;i++){   

                var ty = (canvas.height-((P_radius+yjg)*6))/2;   

                for(var j=0;j<numData[0].length;j++){   

                    var tt = numData[0].charAt(j);   

                    if(tt==="/"){   

                        ty+=yjg;   

                    }else {   

                        var x = tx+j%5*(P_radius*2+X_J),   

                            y = ty;   

                        bGCtx.fillStyle = "#FFF";   

                        bgctx.beginPath();   

                        bgctx.arc(x,y,P_radius,0,2*Math.PI);   

                        bgctx.fill();   

                    }   

                }   

                tx+=xjg+4*(P_radius*2+X_J);   

            }   

        }   

  先把背景画到一个离屏canvas中缓存起来,接下来每一帧重画的时候就不需要逻辑计算了,直接把那个离屏canvas画上去就行了。上面的逻辑应该不难理解,就是通过两个循环,循环8个数字,然后再对每个数字一个点一个点进行绘制,当遇到“/”时,就说明要换行了,把绘制的ty加个换行间隔,再把tx重置,再进行绘制。就这样,点就可以都画出来了。效果图如下:

2015511172757389.png (1282&times;350)

背景画好了,就开始根据每一秒的时间,画数字像素吧。方法主要是这个:

XML/HTML Code复制内容到剪贴板

function setTime(time){   

            var h = time.getHours()+"",   

                m = time.getMinutes()+"",   

                s = time.getSeconds()+"";   

            hh = h.length===1?"0"+h:h;   

            mm = m.length===1?"0"+m:m;   

            ss = s.length===1?"0"+s:s;   

            var nowdate = h+":"+m+":"+s;   

            var tx = (canvas.width-((P_radius*2+X_J)*4*8+7*xjg))/2,color = "";   

            for(var i=0;i<nowdate.length;i++){   

                var n = nowdate.charAt(i)===":"?10:parseInt(nowdate.charAt(i)),   

                    text = numData[n];   

                var ty = (canvas.height-((P_radius+yjg)*6))/2;   

                switch(i){   

                    case 0:color = "#4DCB74";break;   

                    case 2:color = "#4062E0";break;   

                    case 3:color = "#D65050";break;   

                    case 5:color = "#4062E0";break;   

                    case 6:color = "#797C17";break;   

                }   

                for(var j=0;j<text.length;j++){   

                    var tt = text.charAt(j);   

                    if(tt==="/"){   

                        ty+=yjg;   

                    }else{   

                        var x = tx+j%5*(P_radius*2+X_J),   

                            y = ty,   

                            pp = null,   

                            usefullp = null;   

                        particles.forEach(function(p){   

                            if(p.visible&p.x===x&p.y===y){   

                                ppp = p;   

                            }else if(!p.visible&usefullp===null){   

                                usefullp = p;   

                            }   

                        });   

                        if(pp!==null&tt==="0"){   

                            pp.isDrop();   

                        }else if(pp===null&tt==="1"){   

                            usefullp.reset(x , y , color);   

                        }   

                    }   

                }   

                tx+=xjg+4*(P_radius*2+X_J);   

            }   

        }  

  原理也不难,也是跟上面画背景差不多,遍历所有点,然后根据当前时间的数字转换成的字符串来判断,当前点是否应该有像素,如果有像素就再判断当前这个点是否已经有粒子对象在了,如果已经有粒子对象在了,就直接跳出不处理,如果没有粒子对象在,就再粒子容器中找一个没有被使用的粒子reset到这个位置。还有一种情况,就是当前这个点是不应该有像素的,但是却有粒子,那就获取这个粒子,让这个粒子进行自由落体。

  时间设置也写好了,就可以写舞台更新的代码了:

XML/HTML Code复制内容到剪贴板

var timeCount_0 = 0,timeCount_1 = 0,particles = [];   

        function initAnimate(){   

            for(var i=0;i<200;i++){   

                var p = new Particle();   

                particles.push(p);   

            }   

            timeCount_0 = new Date();   

            timeCount_1 = new Date();   

            drawBg();   

            setTime(timeCount_0)   

            animate();   

        }   

        function animate(){   

            ctx.clearRect(0,0,canvas.width,canvas.height);   

            ctx.drawImage(bgcanvas,0,0);   

            var timeCount_2 = new Date();   

            if(timeCount_1-timeCount_0>=1000){   

                setTime(timeCount_1);   

                timeCount_0 = timeCount_1;   

            }   

            particles.forEach(function(p){   

                if(p.visible){   

                    p.update((timeCount_2-timeCount_1)/70);   

                    p.paint();   

                }   

            });   

            timeCount_1 = timeCount_2;   

            RAF(animate)   

        }  

  在initAnimate进行动画初始化,初始化也就是先实例化两百个粒子对象放到粒子容器中保存起来,再更新时间戳,缓存背景,设置当前时间,然后调用animate动画循环主体开始动画。

  animate中的逻辑也很简单了,获取时间戳,如果两个时间戳之间的时间差大于或等于1秒,就进行setTime。而再下面的就是对粒子容器里的所有可视化的粒子进行遍历循环重绘了。

到此,相信大家对“如何用HTML5制作数字时钟”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何用HTML5制作数字时钟

本文链接: https://www.lsjlt.com/news/92160.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用HTML5制作数字时钟
    本篇内容主要讲解“如何用HTML5制作数字时钟”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用HTML5制作数字时钟”吧! 复制代码 XML/HTML ...
    99+
    2024-04-02
  • 怎么用HTML5制作数字时钟
    这篇文章主要介绍“怎么用HTML5制作数字时钟”,在日常操作中,相信很多人在怎么用HTML5制作数字时钟问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用HTML5制作数字...
    99+
    2024-04-02
  • 如何使用纯html5绘制时钟
    这篇文章主要介绍如何使用纯html5绘制时钟,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一起看下效果图:  实现的代码。  htm代码:XML/HTML Code复制内容到剪贴板&...
    99+
    2024-04-02
  • html5怎么制作时钟动画
    本篇内容介绍了“html5怎么制作时钟动画”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!<canva...
    99+
    2024-04-02
  • JS+html如何制作时钟
    小编给大家分享一下JS+html如何制作时钟,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!时钟效果图:闲来无聊做了一个网页的时钟...
    99+
    2024-04-02
  • 如何用html5画一个时钟
    本篇内容介绍了“如何用html5画一个时钟”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   1.实现效...
    99+
    2024-04-02
  • Python+Tkinter绘制一个数字时钟
    Tkinter 实现上述功能并不复杂,只要使用 Tkinter 的相关组件和一些简单的逻辑处理即可,在编写这个案例的过程中大家要做到温故而知新。 程序代码如下所示: from tki...
    99+
    2024-04-02
  • CSS如何绘制时钟
    这篇文章主要介绍了CSS如何绘制时钟,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. CSS3Gen - CSS3动画生成器CSS3Gen...
    99+
    2024-04-02
  • C#如何绘制时钟
    今天小编给大家分享一下C#如何绘制时钟的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。时钟是这样的一共使用四个控件即可:Win...
    99+
    2023-07-02
  • HTML5如何实现可缩放时钟
    这篇文章主要为大家展示了“HTML5如何实现可缩放时钟”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5如何实现可缩放时钟”这篇文章吧。具体代码如下所示:...
    99+
    2024-04-02
  • JavaScript如何实现动态数字时钟
    小编给大家分享一下JavaScript如何实现动态数字时钟,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现效果代码实现<!DOCTYPE htm...
    99+
    2023-06-15
  • 如何使用HTML5实现一个时钟动画
    这篇文章主要为大家展示了“如何使用HTML5实现一个时钟动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用HTML5实现一个时钟动画”这篇文章吧。  ...
    99+
    2024-04-02
  • 如何使用canvas绘制超炫时钟
    这篇文章主要介绍“如何使用canvas绘制超炫时钟”,在日常操作中,相信很多人在如何使用canvas绘制超炫时钟问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用canv...
    99+
    2024-04-02
  • html5如何制作新增的定时器requestAnimationFrame
    这篇文章主要介绍了html5如何制作新增的定时器requestAnimationFrame,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
  • Python中利用pyqt5制作指针钟表显示实时时间(指针时钟)
    文末附完整源代码实现过程... 想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现。说到绘图的话,turtle框架无疑是最常见的选择,...
    99+
    2024-04-02
  • 如何利用html 5制作一个简单的时钟效果
    这篇文章将为大家详细讲解有关如何利用html 5制作一个简单的时钟效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们先来看看最终效果:看上去很简单的一个时钟效果,但是具体实现代码仍然包含了一些重点知识...
    99+
    2023-06-06
  • 基于HTML5+CSS3如何实现时钟效果
    这篇文章给大家分享的是有关基于HTML5+CSS3如何实现时钟效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。目的:利用html5,css实现钟摆效果知识点: 1) 利用pos...
    99+
    2024-04-02
  • 基于PyQt5如何制作一个动态指针时钟
    这篇文章主要介绍基于PyQt5如何制作一个动态指针时钟,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现。说到绘图的话,tu...
    99+
    2023-06-29
  • 如何使用HTML5实现会走动的图形时钟
    本篇内容介绍了“如何使用HTML5实现会走动的图形时钟”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用H...
    99+
    2024-04-02
  • 如何使用html5制作loading图
    小编给大家分享一下如何使用html5制作loading图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 代码如下: <...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作