前端 | 实时电子时钟

文章目录

  • 📚实现效果
  • 📚模块实现解析
    • 🐇html
    • 🐇css
    • 🐇JavaScript

📚实现效果

在这里插入图片描述

📚模块实现解析

🐇html

  • 搭个框架
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>喵喵大王立大功</title>
        <link rel="stylesheet" href="./style.css">
    </head>
    <body>
        <main id="board">
            <!-- 时钟部分 -->
            <div class="clock">
                <!-- 小时 -->
                <div class="hours">
                  <div class="first">
                    <div class="number">0</div>
                  </div>
                  <div class="second">
                    <div class="number">0</div>
                  </div>
                </div>
                <div class="tick">:</div>
                <!-- 分钟 -->
                <div class="minutes">
                  <div class="first">
                    <div class="number">0</div>
                  </div>
                  <div class="second">
                    <div class="number">0</div>
                  </div>
                </div>
                <div class="tick">:</div>
                <!-- 秒 -->
                <div class="seconds">
                  <div class="first">
                    <div class="number">0</div>
                  </div>
                  <div class="second infinite">
                    <div class="number">0</div>
                  </div>
                </div>
            </div>
        </main>
    </body>
    <script src="./js/clock.js"></script>
    </html>
    

🐇css

  • 创建一个时钟的动画效果
    * {
        padding: 0;
        margin: 0;
    }
    
    /* 整个面板 */
    #board {
        position: relative;
        /* 铺满整个视口 */
        width: 100vw;
        height: 100vh;
        background-color: #F1EEE7;
    }
    
    
    /* #region时钟start */
    .clock {
        height: 9.8vh;
        color: #e2a2aca1;
        font-size: 9.8vh;
        font-weight: bold;
        font-family: FangSong; 
        line-height: 9.8vh;
        display: flex;
        position: absolute;
        bottom: 89%;
        left: 40%;
        overflow: hidden;
    }
    .clock > div {
        display: flex;
    }
    .tick {
        line-height: 7vh;
    }
    .tick-hidden {
        opacity: 0;
    }
    /* 线性过渡,持续时间为1s */
    .move {
        animation: move linear 1s infinite;
    }
    @keyframes move {
        from {
            transform: translateY(0vh);
        }
        to {
            transform: translateY(-10vh);
        }
    }
    /* #endregion时钟end */
    

🐇JavaScript

  • 实时更新时间的显示,并且在数字变化时有一个平滑的动画效果。
    // 锁定元素
    var hoursContainer = document.querySelector('.hours') 
    var minutesContainer = document.querySelector('.minutes') 
    var secondsContainer = document.querySelector('.seconds') 
    var tickElements = Array.from(document.querySelectorAll('.tick')) 
    
    // 保存上一次时间,初始值为0。
    var last = new Date(0) 
    // 设置为-1,以确保首次更新所有时间显示
    last.setUTCHours(-1) 
    // 用于记录动画效果的状态
    var tickState = true 
    
    // 更新时间
    function updateTime () {
        var now = new Date 
        var lastHours = last.getHours().toString() 
        var nowHours = now.getHours().toString()
        // 如果上一次时间的小时和当前时间的小时不相等
        if (lastHours !== nowHours) {
            // 更新小时的显示
            updateContainer(hoursContainer, nowHours) 
        }
        // 分钟和秒同理
        var lastMinutes = last.getMinutes().toString() 
        var nowMinutes = now.getMinutes().toString() 
        if (lastMinutes !== nowMinutes) { 
            updateContainer(minutesContainer, nowMinutes) 
        }
        var lastSeconds = last.getSeconds().toString() 
        var nowSeconds = now.getSeconds().toString() 
        if (lastSeconds !== nowSeconds) {
            updateContainer(secondsContainer, nowSeconds) 
        }
        // 更新上一次时间为当前时间
        last = now 
    }
    
    // 切换'tick'元素的CSS类'tick-hidden'以实现闪烁效果
    function tick () {
        tickElements.forEach(t => t.classList.toggle('tick-hidden')) 
    }
    
    // 更新显示
    function updateContainer (container, newTime) {
        var time = newTime.split('') 
        if (time.length === 1) { 
            //单个数字补0
            time.unshift('0') 
        }
        // 更新显示
        var first = container.firstElementChild 
        if (first.lastElementChild.textContent !== time[0]) { 
            updateNumber(first, time[0]) 
        }
        var last = container.lastElementChild 
        if (last.lastElementChild.textContent !== time[1]) { 
            updateNumber(last, time[1])
        }
    }
    
    // 变更动画实现
    function updateNumber (element, number) {
        var second = element.lastElementChild.cloneNode(true) 
        second.textContent = number 
        element.appendChild(second) 
        element.classList.add('move') 
    
        setTimeout(function () {
            element.classList.remove('move')
        }, 975)
        //选用975而非1000会更平滑
        setTimeout(function () {
            element.removeChild(element.firstElementChild) 
        }, 975)
    }
    
    setInterval(updateTime, 100) 
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/598118.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

04-23 周二 shell环境下读取使用jq 读取json文件

04-23 周二 shell环境下读取使用jq 读取json文件 时间版本修改人描述04-23V0.1宋全恒新建文档 简介 工具列表 Shell脚本处理JSON数据工具jq jshon是另外一个读取json数据的工具 而且其支持XML和YAML格式文件 linux shell环境下处理yml文件 #!/bin/bash# 加载shyaml库 . /…

计算机网络学习记录Day1

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 计算机网络学习记录Day1 本文基于1.1 计算机网络在信息…

信创基础软件之中间件

信创基础软件之中间件 中间件概述 中间件是一种应用于分布式系统的基础软件&#xff0c;位于应用与操作系统、数据库之间&#xff0c;主要用于解决分布式环境下数据传输、数据访问、应用调度、系统构建和系统集成、流程管理等问题&#xff0c;是分布式环境下支撑应用开发、运…

学习记录:AUTOSAR R20-11的阅读记录(五)【CP(5.11-5.19)】完

接上回&#xff1a;学习记录&#xff1a;AUTOSAR R20-11的阅读记录&#xff08;四&#xff09;【CP&#xff08;5.6-5.10&#xff09;】 五、CP 11、General&#xff08;4个&#xff09; 5.11 File Name 说明 1 AUTOSAR_EXP_ LayeredSoftwareArchitecture.pdf 描述了AUTO…

AIGC (AI-Generated Content) 技术深度探索:现状、挑战与未来愿景

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f916; AIGC技术&#xff1a;塑造未来的创意与内容革命 &#x1f31f;引言 &#x1f680;AIGC技术发展现状 &#x1f4c8;核心技术驱动 &#x1f4a1;应用领域拓展 &#x1f310; 面临的挑战 ❌真实性与伦理考量 &am…

Spring @Repository 注解

Spring 的项目严重依赖注解。 Repository 注解 在Spring2.0之前的版本中&#xff0c;Repository注解可以标记在任何的类上&#xff0c;用来表明该类是用来执行与数据库相关的操作(即dao对象)&#xff0c;并支持自动处理数据库操作产生的异常 在Spring2.5版本中&#xff0c;引…

3度带6度带中央经线及带号换算问题

前言&#xff1a;3度带6度带中央经线及代号换算问题是比较繁琐的一个问题&#xff0c;不经常用&#xff0c;公式记不住&#xff0c;因此本文特此整理&#xff0c;以备查。 1.基本概况 我国基本比例尺地形图除1&#xff1a;100万采用兰勃特投影&#xff08;lambert&#xff09;外…

信息系统项目管理师0090:项目经理的影响力范围(6项目管理概论—6.3项目经理的角色—6.3.2项目经理的影响力范围)

点击查看专栏目录 文章目录 6.3.2项目经理的影响力范围1.概述2.项目3.组织4.行业5.专业学科6.跨领域6.3.2项目经理的影响力范围 1.概述 项目经理在其影响力范围内可担任多种角色,这些角色反映了项目经理的能力,体现了项目经理的价值和作用,项目经理会涉及项日、组织、行业、…

爬虫案例:股吧,使用Selenium

爬虫案例:股吧,使用Selenium 实用工具关注公众号爬虫探索者获取。 发送对应关键词: 1.运行环境 pip install selenium==4.9.1 pip install pymysql1.1.高版本Chrome问题 针对于高版本的Chrome浏览器 1.2.最终效果 2.目标网站 3.参数介绍 BASE_URL = https://guba.eas…

ppp和ppp mp理论实验

ppp简介 PPP&#xff08;点对点协议&#xff09;为在点对点连接上传输多协议数据包提供了一个标准方法&#xff0c;是数据链路层封装协议的一种方法&#xff0c;支持同步和异步两种传输方式。&#xff08;除了PPP还有HDLC等&#xff0c;不过HDLC只支持同步方式&#xff09; P…

信号与进程(3):信号及其使用

信号及其使用 参考博客 Linux信号的产生和处理 信号及其使用 信号的产生 信号由内核产生&#xff0c;信号的生成与事件的发生相关&#xff0c;事件的发生源有3类&#xff1a; 1、用户 用户在终端上按下某些按键时会产生信号&#xff0c;如**CtrlC产生SIGINT信号&#xff0…

springboot+mp自动生成没有实体类

mybatisX版本冲突问题 一开始我的MyBatisX版本是1.6.1-3,使用mybatis-plus一直不能正常生成实体类 将MyBatisX的版本换成了1.5.7就可以了 MyBatisX版本更换 1.将原有的MyBatisX卸载后重新安装一个新的版本 2.选择一个合适的版本,这里我选的是1.5.7 下载完成后自己选择一个…

【隧道篇 / WAN优化】(7.4) ❀ 02. WAN优化的作用 ❀ FortiGate 防火墙

【简介】看了上一篇文章&#xff0c;相信大家都知道了在防火墙上启动WAN优化的方法&#xff0c;但是WAN优化到底能做什么&#xff1f;相信有很多人想了解。 什么是WAN优化 现在有许多企业通过集中应用程序或在云中提供应用程序来降低成本并整合资源。应用程序在本地局域网内都能…

python多标签图像分类的图片相册共享交流系统vue+django

建立图片共享系统&#xff0c;进一步提高用户对图片共享信息的查询。帮助用户和管理员提高工作效率&#xff0c;实现信息查询的自动化。使用本系统可以轻松快捷的为用户提供他们想要得到的图片共享信息。 根据本系统的基本设计思路&#xff0c;本系统在设计方面前台采用了pytho…

springboot 引入第三方bean

如何进行第三方bean的定义 参数进行自动装配

CH32V 系列 MCU IAP 使用函数形式通过传参形式灵活指定APP跳转地址

参考: CH32V 系列 MCU IAP 升级跳转方法 CH32V103 的 IAP 问题&#xff08;跳转及中断向量表重定位&#xff09; 1. 沁恒的RISC-V内核MCU的IAP跳转示例程序简要分析 沁恒的RISC-V内核的MCU比如CH32V203、CH32V307等系列的EVT包中IAP升级的示例程序中都是通过使能软件中断之后&…

先进制造业数字化转型,为什么基于传统存储无法完成?

本文是 XSKY 智能存储方案助力先进制造数字化转型系列文章中的第一篇&#xff0c;重点分享先进制造行业数字化转型过程中&#xff0c;对于数据存储的需求&#xff0c;以及为何传统存储架构无法很好满足这些需求。 随着智能制造的发展&#xff0c;自动化、信息化、智能化等技术…

linux命令——fdisk分区

在linux中&#xff0c;一切皆文件&#xff0c;硬盘设备在系统中也以文件形式存在&#xff0c;使用fdisk命令可以查看硬盘分区信息 并非硬盘转速越快&#xff0c;文件读取速率越高&#xff0c;有一个文件存储密度的概念

数据合规官认证证书CCRC-DCO使用设计和默认数据保护处理个人数据

快来了解隐私保护工程实践&#xff01;合法原则是关键&#xff0c;一起守护数据安全&#xff01; 隐私保护工程实践需要遵循合法原则&#xff0c;控制者必须确保处理个人数据有明确的法律依据。在设计和默认数据保护中&#xff0c;相关性、差异化、特定目的、必要性和自主权是合…