实现 3D 数字时钟

3D 数字时钟实现

效果展示

在这里插入图片描述

CSS / JavaScript 知识点

  • box-shadow 属性运用,实现 3D 效果的数字时钟
  • transform 属性灵活运用,实现数值时钟上的数字部分
  • JavaScript Date()对象的运用

页面整体布局

<div class="clock"><!-- 时钟仪表盘 --><div class="numbers"><!-- 时钟指针 --><div class="circle" id="sec" style="--clr: #04fc43"><i></i></div><div class="circle" id="min" style="--clr: #fee800"><i></i></div><div class="circle" id="hrs" style="--clr: #ff2927"><i></i></div><!-- 数字,360 / 12 = 30,从0度开始 --><span style="--i:0"><b>12</b></span><span style="--i:1"><b>1</b></span><span style="--i:2"><b>2</b></span><span style="--i:3"><b>3</b></span><span style="--i:4"><b>4</b></span><span style="--i:5"><b>5</b></span><span style="--i:6"><b>6</b></span><span style="--i:7"><b>7</b></span><span style="--i:8"><b>8</b></span><span style="--i:9"><b>9</b></span><span style="--i:10"><b>10</b></span><span style="--i:11"><b>11</b></span></div><!-- 数字仪表盘 --><div id="time"><div id="hour" style="--clr: #ff2927">00</div><div id="minutes" style="--clr: #fee800">00</div><div id="seconds" style="--clr: #04fc43">00</div><div id="ampm" style="--clr: #fff">AM</div></div>
</div>

实现数字时钟外部盒子样式

.clock {position: relative;width: 450px;height: 550px;display: flex;justify-content: center;align-items: center;background: #c9d5e0;border-radius: 50px;border-top-left-radius: 250px;border-top-right-radius: 250px;box-shadow: 45px 45px 45px -15px rgba(0, 0, 0, 0.15), inset 15px 15px 10pxrgba(255, 255, 255, 0.75), -15px -15px 35px rgba(255, 255, 255, 0.55), inset -2px -2px15px rgba(0, 0, 0, 0.2);
}

实现上述代码后效果如下:

在这里插入图片描述

实现数字时钟上数字时钟仪表盘的基础样式

.numbers {position: absolute;top: 30px;width: 390px;height: 390px;background: #152b4a;border-radius: 50%;display: flex;justify-content: center;align-items: center;box-shadow: 7px 7px 22px #152b4a66, inset 7px 7px 7px rgba(255, 255, 255, 0.55),-9px -9px 15px rgba(255, 255, 255, 1);
}/* 使用伪块实现时钟仪表盘上指针中心圆点 */
.numbers::before {content: "";position: absolute;width: 4px;height: 4px;border-radius: 50%;background: #e91e63;z-index: 100000;box-shadow: 0 0 0 1px #e91e63, 0 0 0 3px #fff, 0 0 5px 5px rgba(0, 0, 0, 0.15);
}.numbers span {position: absolute;inset: 15px;text-align: center;color: #fff;font-size: 1.25em;/* 使用 transform 属性让数字容器实现360度分散布局(360 / 12 = 30) */transform: rotate(calc(30deg * var(--i)));
}.numbers span b {font-weight: 400;display: inline-block;/* 因数字容器做了角度旋转,所以数字要正常显示的话,也需要旋转对应的角度 */transform: rotate(calc(-30deg * var(--i)));
}

实现数字时钟上指针的基础样式

.numbers .circle {position: absolute;width: 280px;height: 280px;border: 1px solid rgba(0, 0, 0, 0.75);border-radius: 50%;display: flex;justify-content: center;align-items: flex-start;z-index: 10;
}.numbers .circle i {position: absolute;width: 6px;height: 50%;background: var(--clr);opacity: 0.75;transform-origin: bottom;transform: scaleY(0.5);
}.numbers .circle#sec i {width: 2px;
}.numbers .circle#min i {width: 4px;
}.numbers .circle#min {width: 230px;height: 230px;
}.numbers .circle#hrs {width: 180px;height: 180px;
}.numbers .circle::before {content: "";position: absolute;width: 10px;height: 10px;background: var(--clr);top: -6px;left: 50%;border-radius: 50%;transform: translateX(-50%);box-shadow: 0 0 20px var(--clr), 0 0 60px var(--clr);
}

实现上述代码后效果如下:

在这里插入图片描述

实现数字时钟上数字仪表盘部分样式样式

#time {position: absolute;bottom: 35px;display: flex;padding: 10px 20px;font-size: 2em;font-weight: 600;border-radius: 40px;background: #152b4a;/* 使用内部阴影和外部阴影实现3D仪表样式 */box-shadow: 7px 7px 22px #152b4a66, inset 7px 7px 7px rgba(255, 255, 255, 0.55),-9px -9px 15px rgba(255, 255, 255, 1);
}#time div {position: relative;width: 60px;text-align: center;color: var(--clr);opacity: 0.75;
}#time div:last-child {font-size: 0.5em;display: flex;justify-content: center;align-items: center;font-weight: 500;
}#time div:nth-child(1)::after,
#time div:nth-child(2)::after {content: ":";position: absolute;right: -4px;
}#time div:nth-child(2)::after {/* 使用动画实现秒钟元素的闪缩 */animation: animate 1s steps(1) infinite;
}@keyframes animate {0% {opacity: 1;}50% {opacity: 0;}
}

实现上述代码后效果如下:

在这里插入图片描述

使用 JavaScript 实现数字时钟运动效果

let hr = document.querySelector("#hrs");
let mn = document.querySelector("#min");
let sc = document.querySelector("#sec");setInterval(() => {let day = new Date();let hh = day.getHours() * 30;let mm = day.getMinutes() * 6;let ss = day.getSeconds() * 6;hr.style.transform = `rotateZ(${hh + mm / 12}deg)`;mn.style.transform = `rotateZ(${mm}deg)`;sc.style.transform = `rotateZ(${ss}deg)`;let hour = document.getElementById("hour");let minute = document.getElementById("minutes");let seconds = document.getElementById("seconds");let ampm = document.getElementById("ampm");let h = new Date().getHours();let m = new Date().getMinutes();let s = new Date().getSeconds();let am = h >= 12 ? "PM" : "AM";if (h > 12) {h = h - 12;}h = h < 10 ? "0" + h : h;m = m < 10 ? "0" + m : m;s = s < 10 ? "0" + s : s;hour.innerHTML = h;minute.innerHTML = m;seconds.innerHTML = s;ampm.innerHTML = am;
});

完整代码下载

完整代码下载

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯小白蓝桥杯备赛笔记--DAY9(动态规划)

文章目录 一、动态规划基础&#xff08;1&#xff09;线性DP简介步骤例题数字三角形--1536破损的楼梯-3367安全序列-3423 &#xff08;2&#xff09;二维DP简介例题摆花--389选数异或--3711数字三角形--505 &#xff08;3&#xff09;最长公共子序列LCSLCS算法模型最长公共子序…

智慧公厕升级为多功能城市智慧驿站,助力智慧城市发展

在现代城市的建设中&#xff0c;公共厕所作为基础必备的民生设施&#xff0c;一直是城市管理的重要组成部分。随着科技的不断发展&#xff0c;智慧公厕应运而生&#xff0c;成为了公共厕所信息化、数字化、智慧化的应用解决方案。而近年来&#xff0c;智慧公厕也进行了升级发展…

精品丨PowerBI负载测试和容量规划

当选择Power BI作为业务报表平台时&#xff0c;如何判断许可证的选择是否符合业务需求&#xff0c;价格占了主导因素。 Power BI的定价是基于SKU和服务器内核决定的&#xff0c;但是很多IT的负责人都不确定自己公司业务具体需要多少。 不幸的是&#xff0c;Power BI的容量和预期…

Redis的高可用和持久化

目录 一、Redis高可用 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化 三、RDB持久化 3.1 触发条件 3.1.1 手动触发 3.1.2 自动触发 3.1.3 其他自动触发机制 四、AOF持久化 4.1 开启AOF 4.2 执行流程 4.2.1 命令追加 (append) 4.2.2 文件写入…

FANUC机器人基础数据类型

FANUC机器人KAREL基本数据类型有下述几种&#xff1a; FANUC常量机器人申明示例&#xff1a; FANUC变量申明的语法表&#xff1a; FANUC机器人的存储模式&#xff1a; DREM&#xff1a;关机后清空内存数据 CMOS&#xff1a;断电保持&#xff0c;不清空被赋值后的数据 如果不…

前端零基础学习web3开发

目录 1 钱包 2 发起交易 3 出块 4 块高 5 矿工 6 Gas费 这一节&#xff0c;我们不说让人神往的比特币&#xff0c;不说自己会不会利用这个虚拟的货币来发财&#xff0c;也不说那些模模糊糊的知识&#xff0c;什么去中心化啦&#xff0c;什么奇妙的加密啦&#xff0c;我们…

吴恩达:AI 智能体工作流

热门文章推荐&#xff1a; &#xff08;1&#xff09;《为什么很多人工作 3 年 却只有 1 年经验&#xff1f;》&#xff08;2&#xff09;《一文掌握大模型提示词技巧&#xff1a;从战略到战术巧》&#xff08;3&#xff09;《AI 时代&#xff0c;程序员的出路在何方&#xff1…

pandas用法-详解教程

pandas用法-详解教程 一、生成数据表二、数据表信息查看三、数据表清洗四、数据预处理五、数据提取六、数据筛选七、数据汇总八、数据统计九、数据输出 一、生成数据表 1、首先导入pandas库&#xff0c;一般都会用到numpy库&#xff0c;所以我们先导入备用&#xff1a; impor…

掌握 JMeter 参数化测试,提升应用性能测试水平!

本周给大家介绍下如何测试工具Jmeter中的参数化 随着互联网的快速发展&#xff0c;性能测试已成为每个应用程序不可或缺的一部分。Apache JMeter 是一款广泛使用的开源性能测试工具&#xff0c;可以帮助我们模拟并发用户对目标服务器发起请求&#xff0c;以评估系统的性能。在…

通用分布式锁组件

通用分布式锁组件 1 Redisson1.1介绍1.2 为什么要使用Redisson实现分布式锁1.2.1 锁续期的问题1.2.2 获取锁尝试的问题1.2.3 可重入问题 1.3 Wath Dog的自动延期机制1.4 快速了解1.5 项目集成 2 定义通用分布式锁组件2.1 实现思路分析2.2 定义注解2.3 定义切面2.4 使用锁2.5.工…

设计模式总结-桥接模式

桥接模式 模式动机模式定义模式结构模式分析桥接模式实例与解析实例一&#xff1a;模拟毛笔 模式优缺点 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形&#xff0c;我们至少需要4个形状类&#xff0c;但是如果绘制的图形需要具有不同的颜色&#xff0c;如红色、绿色、蓝色…

文件上传与下载

文件上传与下载 在Spring Boot中实现文件上传与下载的功能通常涉及前端和后端的交互。前端负责提供文件选择的界面和触发上传/下载操作&#xff0c;后端则负责处理文件上传的请求、存储文件&#xff0c;以及处理文件下载的请求并发送文件内容给前端。 文件上传 前端&#xf…