(二)原生js案例之数码时钟计时
原生js实现的数字时间上下切换显示时间的效果,有参考相关设计,思路比较难,代码其实很简单
效果

代码实现
- 必要的样式
<style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justify-content: center;flex-direction: column;height: 100vh;background: linear-gradient(202deg,#F3E7E9 0%,#FFFFFF 53%,#E3EEFF 100%); }#title{margin:20px;font-size: 40px;}ul {list-style: none;overflow: hidden;}li {float: left;}li.time-box {width: 122px;height: 172px;overflow: hidden;position: relative;}li.colon{animation: dotLignt 1s linear infinite alternate;font-size: 80px;height: 172px;line-height: 172px;font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;}/* 闪烁东湖*/@keyframes dotLignt {0% {opacity: 1;}50% {opacity: 50%;}100% {opacity: 0;}}</style>
- 静态页面
<div class="content"><h2 id="title"></h2><p id="time"></p><ul><li id="h1" class="time-box"><img class="time" src="./img/0.JPG" alt="" srcset="" /></li><li id="h2" class="time-box"><img class="time" src="./img/1.JPG" alt="" srcset="" /></li><li class="colon"><span>:</span></li><li id="fen1" class="time-box"><img class="time" src="./img/2.JPG" alt="" srcset="" /></li><li id="fen2" class="time-box"><img class="time" src="./img/3.JPG" alt="" srcset="" /></li><li class="colon"><span>:</span></li><li id="miao1" class="time-box"><img class="time" src="./img/4.JPG" alt="" srcset="" /></li><li id="miao2" class="time-box up"><img class="time" src="./img/5.JPG" alt="" srcset="" /></li></ul></div>
- js核心代码
window.onload = function () {const oBody = document.bodyconst oP = oBody.querySelector('#time')const oTitle = document.querySelector('#title')const oImg = document.querySelectorAll('img.time')const oH1 = document.querySelector('#h1')const oH2 = document.querySelector('#h2')const oFen1 = document.querySelector('#fen1')const oFen2 = document.querySelector('#fen2')const oMiao1 = document.querySelector('#miao1')const oMiao2 = document.querySelector('#miao2')let isInit = truefnTime()function fnTime() {const myTime = new Date()const year = myTime.getFullYear()const month = myTime.getMonth() + 1const day = myTime.getDate()const hour = myTime.getHours()const minute = myTime.getMinutes()const second = myTime.getSeconds()//星期let week = myTime.getDay()switch (week) {case 0:week = '星期日'breakcase 1:week = '星期一'breakcase 2:week = '星期二'breakcase 3:week = '星期三'breakcase 4:week = '星期四'breakcase 5:week = '星期五'breakcase 6:week = '星期六'breakdefault:week = ''}const time = fnAddZero(hour) + fnAddZero(minute) + fnAddZero(second)// oP.innerHTML = timeoTitle.innerHTML = year + '年' + month + '月' + day + '日' + week//初始化加载一次,防止刷新的时候出现闪屏if(isInit){for (let i = 0; i < oImg.length; i++) {oImg[i].src = `./img/${time.charAt(i)}.JPG`}}isInit = falsereturn time}//辅助方法,补0function fnAddZero(num) {if (num < 10) {return '0' + num}return '' + num}let ht1=0;let h1 = 0setInterval(function () {let a = fnTime();//获得当前的子结点if(a[0] != h1){h1 = a[0];let childImg = oH1.getElementsByTagName('img')[0];let imgM = document.createElement('img');imgM.src='img/'+a[0]+'.jpg';oH1.appendChild(imgM);let m2 = setInterval(function () {ht1+=1;oH1.scrollTop=ht1;if (ht1>=70){clearInterval(m2);setTimeout(function () {childImg.remove();ht1=0;},100)}},1)}},1000);let ht2=0;let h2 = 0setInterval(function () {let a = fnTime();//获得当前的子结点if(a[1] != h2){h2 = a[1];let childImg = oH2.getElementsByTagName('img')[0];let imgM = document.createElement('img');imgM.src='img/'+a[1]+'.jpg';oH2.appendChild(imgM);let m2 = setInterval(function () {ht2+=1;oH2.scrollTop=ht2;if (ht2>=70){clearInterval(m2);setTimeout(function () {childImg.remove();ht2=0;},100)}},1)}},1000);let ft1=0;let f1 = 0setInterval(function () {let a = fnTime();//获得当前的子结点if(a[2] != f1){f1 = a[2];let childImg = oFen1.getElementsByTagName('img')[0];let imgM = document.createElement('img');imgM.src='img/'+a[2]+'.jpg';oFen1.appendChild(imgM);let m2 = setInterval(function () {ft1+=1;// console.log(mt2);oFen1.scrollTop=ft1;if (ft1>=70){clearInterval(m2);setTimeout(function () {childImg.remove();ft1=0;},100)}},1)}},1000);let ft2=0;let f2 = 0setInterval(function () {let a = fnTime();//获得当前的子结点if(a[3] != f2){f2 = a[3];let childImg = oFen2.getElementsByTagName('img')[0];let imgM = document.createElement('img');imgM.src='img/'+a[3]+'.jpg';oFen2.appendChild(imgM);let m2 = setInterval(function () {ft2+=1;oFen2.scrollTop=ft2;if (ft2>=70){clearInterval(m2);setTimeout(function () {childImg.remove();ft2=0;},100)}},1)}},1000);let mt1=0;let m1 = 0setInterval(function () {let a = fnTime();console.log("🚀 ~ a:", a)//获得当前的子结点if(a[4] != m1){console.log("🚀 ~ m1:", m1)console.log("🚀 ~ a[4]:", a[4])m1 = a[4];let childImg = oMiao1.getElementsByTagName('img')[0];let imgM = document.createElement('img');imgM.src='img/'+a[4]+'.jpg';oMiao1.appendChild(imgM);let m2 = setInterval(function () {mt1+=1;// console.log(mt2);oMiao1.scrollTop=mt1;if (mt1>=70){clearInterval(m2);setTimeout(function () {childImg.remove();mt1=0;},100)}},1)}},1000);let mt2=0;setInterval(function () {let a = fnTime();//获得当前的子结点let childImg = oMiao2.getElementsByTagName('img')[0];let imgM = document.createElement('img');imgM.src='img/'+a[5]+'.jpg';oMiao2.appendChild(imgM);let m2 = setInterval(function () {mt2+=1;// console.log(mt2);oMiao2.scrollTop=mt2;if (mt2>=70){clearInterval(m2);setTimeout(function () {childImg.remove();mt2=0;},100)}},1)},1000);}
这样就实现了我们的数字时间的切换效果
相关文章:
(二)原生js案例之数码时钟计时
原生js实现的数字时间上下切换显示时间的效果,有参考相关设计,思路比较难,代码其实很简单 效果 代码实现 必要的样式 <style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justif…...
[CSS] 浮动布局的深入理解与应用
文章目录 浮动的简介元素浮动后的特点解决浮动产生的影响浮动后的影响解决浮动产生的影响 浮动相关属性实际应用示例示例1:图片与文字环绕示例2:多列布局示例3:响应式布局 总结 浮动布局是CSS中一种非常强大的布局方式,最初设计用…...
Linux云计算 |【第一阶段】ENGINEER-DAY2
主要内容: 磁盘空间管理fdisk、parted工具、开机自动挂载、文件系统、交换空间 KVM虚拟化 实操前骤: 1)添加一块硬盘(磁盘),需要关机才能进行操作,点击左下角【添加硬件】 2)选择2…...
9.11和9.9哪个大?
没问题 文心一言 通义千问...
学懂C语言(十二):C语言中的二进制原理及应用
目录 1. 二进制原理 1.1 什么是二进制? 1.2 如何在C语言中表示二进制? 2. 二进制的表示 2.1 二进制和其他进制的转换 2.2 C语言中的二进制表示 3. 二进制运算 3.1 位运算符 3.2 计算过程示例 4. 应用示例 4.1 使用位运算实现开关 5. 总结 C语…...
科研绘图系列:R语言雨云图(Raincloud plot)
介绍 雨云图(Raincloud plot)是一种数据可视化工具,它结合了多种数据展示方式,旨在提供对数据集的全面了解。雨云图通常包括以下几个部分: 密度图(Density plot):表示数据的分布情况,密度图的曲线可以展示数据在不同数值区间的密度。箱线图(Box plot):显示数据的中…...
优化教学流程和架构:构建高效学习环境的关键步骤
在教育领域,设计和优化教学流程和架构是提高学习效果和学生参与度的关键。本文将探讨如何通过合理的教学流程和有效的架构来构建一个高效的学习环境。 ### 1. 理解教学流程和架构的重要性 教学流程指的是教学活动的组织和顺序,而教学架构则是指支持教学…...
js | this 指向问题
https://juejin.cn/post/6844904083707396109 任何函数运行的时候,都会创建一个context对象,context对象有一个this对象,在运行的时候决定。任何函数都对应一个reference类结构体(具体叫啥有点忘了),简单就…...
《昇思 25 天学习打卡营第 15 天 | 基于MindNLP+MusicGen生成自己的个性化音乐 》
《昇思 25 天学习打卡营第 15 天 | 基于MindNLPMusicGen生成自己的个性化音乐 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 MusicGen概述 MusicGen是由Meta AI的Jade Copet等人提出的一种基于单个语言模型&…...
Gitee 使用教程1-SSH 公钥设置
一、生成 SSH 公钥 1、打开终端(Windows PowerShell 或 Git Bash),通过命令 ssh-keygen 生成 SSH Key: ssh-keygen -t ed25519 -C "Gitee SSH Key" 随后摁三次回车键(Enter) 2、查看生成的 SSH…...
理解Cookie、Session和Token
在现代Web开发中,用户身份认证和会话管理是至关重要的部分。理解Cookie、Session和Token的区别和应用场景,有助于我们设计出更加安全和高效的Web应用。本文将详细探讨这三者的工作原理、优缺点以及使用场景。 1. Cookie 1.1 什么是Cookie? …...
概率论原理精解【1】
文章目录 测度概述集类笛卡尔积定义例子 多集合的笛卡尔积定义计算方法注意事项 有限笛卡尔积的性质1. 定义2. 性质2.1 基数性质2.2 空集性质2.3 不满足交换律2.4 不满足结合律2.5 对并和交运算满足分配律 3. 示例4. 结论 参考链接 测度 概述 所谓测度,通俗的讲就…...
数据结构(二叉树-1)
文章目录 一、树 1.1 树的概念与结构 1.2 树的相关术语 1.3 树的表示 二、二叉树 2.1 二叉树的概念与结构 2.2特殊的二叉树 满二叉树 完全二叉树 2.3 二叉树的存储结构 三、实现顺序结构二叉树 3.1 堆的概念与结构 3.2 堆的实现 Heap.h Heap.c 默认初始化堆 堆的销毁 堆的插入 …...
巴黎奥运会倒计时 一个非常不错的倒计时提醒
巴黎奥运会还有几天就要开幕了,大家应该到处都可以看到巴黎奥运会的倒计时,不管是电视上,还是网络里,一搜索奥运会,就会看到。倒计时其实是一个我们在生活中很常用的一个方法,用来做事情的提醒,…...
【Python】使用库 -- 详解
库就是别人已经写好了的代码,可以让我们直接拿来用。 一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在…...
Web3D:WebGL为什么在渲染性能上输给了WebGPU。
WebGL已经成为了web3D的标配,市面上有N多基于webGL的3D引擎,WebGPU作为挑战者,在渲染性能上确实改过webGL一头,由于起步较晚,想通过这个优势加持,赶上并超越webGL仍需时日。 贝格前端工场为大家分享一下这…...
SpringBoot面试高频总结01
1. 什么是SpringBoot? SpringBoot是一个基于Spring框架的快速开发框架,它采用约定大于配置,自动装配的方式,可以快速地创建独立的,生产级别的,基于Spring的应用程序。 相比于传统的Spring框架,S…...
Linux 工作队列(Workqueue):概念与实现
目录 一、工作队列的概念1.1 什么是工作队列1.2 为什么使用工作队列 二、工作队列的实现2.1 定义和初始化工作队列2.2 工作队列API 三、工作队列的应用3.1 延迟执行任务3.2 处理复杂的中断任务 四、工作队列的类型4.1 普通工作队列4.2 高优先级工作队列 五、总结 在Linux内核中…...
前端页面是如何禁止被查看源码、被下载,被爬取,以及破解方法
文章目录 1.了解禁止查看,爬取原理1.1.JS代码,屏蔽屏蔽键盘和鼠标右键1.2.查看源码时,通过JS控制浏览器窗口变化2.百度文库是如何防止抓包2.1.HTPPS2.2. 动态加载为什么看不到?如何查看动态加载的内容?3.禁止复制,如果解决3.1.禁止复制原理3.2.如何破解1.了解禁止查看,爬…...
51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单…...
Genus水平共现网络分析:高效替代OTU的实战指南
1. 为什么需要Genus水平共现网络分析? 做微生物群落研究的朋友们应该都深有体会,OTU/ASV水平的共现网络分析简直就是个时间黑洞。我去年处理一个土壤微生物项目时,2000多个OTU的共现网络跑了整整8个小时,等结果的时候都能看完两集…...
如何让实验室管理“更简单”?——King’s LIMS以灵活与智能,重构高效运营新范式
在日常实验室管理中,流程繁琐、数据难溯源、报告生成低效、多场景管控混乱等问题,常成为拖慢运营节奏、抬升运维成本的“隐形阻力”。要打破管理困局、实现轻量化高效运维,选对数字化工具是关键。然而,在选择LIMS的过程中…...
全基因组序列比对工具mVISTA的保姆级使用指南:从文件准备到结果解读
全基因组序列比对工具mVISTA的保姆级使用指南:从文件准备到结果解读 在基因组学研究领域,序列比对是揭示物种间进化关系、识别保守区域和功能元件的基础操作。mVISTA作为一款专门用于全基因组序列比对的在线工具,凭借其直观的可视化界面和强…...
边缘计算与 AI 结合:奥尔特云低功耗边缘算力设备
这款高性能边缘智能算力设备,搭载16T算力AI处理器,以高性能、低功耗、易扩展为核心优势,为用户提供一站式智能化解决方案。设备内置人脸、视频结构化等基础算法,可扩展工业、矿山、能源、园区、城管、无人机巡检等行业专用算法包&…...
SAP EWM开发实战:手把手教你用ABAP OO类 /SCWM/CL_SP_PRD_INB 创建内向交货单
SAP EWM开发实战:基于ABAP OO类实现内向交货单自动化创建 1. 理解内向交货单创建的技术背景 在SAP扩展仓库管理(EWM)系统中,内向交货单(Inbound Delivery)是管理入库流程的核心凭证。与传统的SAP ERP系统不同,EWM模块在设计上采用了更加灵活的…...
嵌入式OLED UI组件库:轻量级C++组件化设计
1. 项目概述 OLED UI Components 是一个面向嵌入式平台的轻量级、组件化 OLED 用户界面开发库,专为基于 SSD1306 驱动芯片的单色 OLED 显示屏(典型分辨率为 12864)设计。该库不直接操作硬件寄存器,而是构建在 Adafruit_SSD1306 库…...
51单片机定时器初值计算与Proteus仿真
51单片机定时器初值计算方法详解1. 定时器基础原理1.1 单片机定时器工作模式51系列单片机内置的定时器/计数器模块是嵌入式系统中实现精确时间控制的核心部件。定时器本质上是一个特殊功能的寄存器,通过累加时钟脉冲实现计时功能。根据位数不同,51单片机…...
C++新手必看:如何用最简单的方法找出一个数的所有因数(附GESP真题解析)
C实战指南:高效求解因数的5种方法及GESP真题精讲 在编程学习的道路上,理解基础算法就像盖房子打地基一样重要。因数计算这个看似简单的题目,其实蕴含着循环控制、条件判断和算法优化等核心编程思想。很多初学者在第一次遇到这类问题时&#x…...
电赛小车避坑指南:从2011到2024,那些年我们踩过的传感器和通信模块的‘坑’
电赛小车避坑指南:从2011到2024,那些年我们踩过的传感器和通信模块的"坑" 参加全国大学生电子设计竞赛的同学们都知道,小车控制类赛题一直是热门选项。从2011年的双车自主超车到2024年的自动行驶小车,这些题目看似简单&…...
PlayCover终极指南:三步在Mac上畅玩iOS游戏与应用
PlayCover终极指南:三步在Mac上畅玩iOS游戏与应用 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover 还在为心爱的iOS游戏无法在Mac上体验而烦恼吗?PlayCover为你打开了一扇全新的…...
