实现动态翻转时钟效果的 HTML、CSS 和 JavaScript,附源码

实现动态翻转时钟效果的 HTML、CSS 和 JavaScript

在现代网页设计中,动画效果可以极大地增强用户体验。本文将介绍如何利用 HTML、CSS 和 JavaScript 创建一个动态翻转时钟的效果,模拟经典机械翻页时钟的视觉效果。我们将通过详细的步骤讲解如何实现时钟数字的翻转动画、3D 视觉效果、模糊效果等,打造一个具有高度还原度的翻转时钟。

机械时钟

源码获取👇

在这里插入图片描述

功能概述

该页面实现了一个动态的翻转时钟效果。通过 flip-card 元素,数字会在每次时间变化时进行翻转。每次数字变化时,都会触发一个翻转动画,并带有模糊和阴影效果,模拟了机械时钟翻页的过程。

主要功能:

  1. 时钟显示:页面每秒钟自动更新当前的时、分、秒,并通过翻转效果展示时间的变化。
  2. 翻转动画:每当时间的某一位数字发生变化时,当前数字会先进行旋转,并伴随模糊效果,直到翻转完成后更新为新数字。
  3. 3D 视觉效果:每个数字卡片应用了透视效果和阴影,增强了 3D 视觉感,使翻转动画更加真实。
  4. 平滑过渡:数字更新时通过适当的延迟控制,使得数字翻转的过程更加流畅自然,避免了突兀的变化。

代码解析

1. HTML 结构

页面的 HTML 结构主要由多个 flip-card 元素组成,每个 flip-card 包含上下两部分:topbottom,分别用于展示数字的上下翻转部分。时钟的每一位数字(时、分、秒)都通过这种结构进行显示。

<div class="flip-card">
    <div class="top" id="h1-top"></div>
    <div class="bottom" id="h1-bottom"></div>
</div>

每个 flip-card 的容器都有一个独立的 topbottom 部分,负责展示数字翻转的上下两部分。每当数字更新时,会通过 JavaScript 动态更新这些部分的内容。

2. CSS 样式

CSS 部分为翻转时钟提供了视觉效果。通过 perspectivetransform-style 属性,为翻转动画提供了 3D 透视效果。此外,使用 @keyframes 来定义翻转动画,其中包括模糊效果和旋转的过渡。

.flip-card {
    perspective: 1000px; /* 设置更强的透视效果 */
}

.flip-card .flip {
    animation: flipDown 0.7s ease-in-out; /* 翻转动画 */
}

@keyframes flipDown {
    0% {
        transform: rotateX(0deg); /* 初始状态 */
        filter: blur(0px); /* 无模糊效果 */
    }
    50% {
        transform: rotateX(90deg); /* 翻转到中间 */
        filter: blur(10px); /* 添加模糊效果 */
    }
    100% {
        transform: rotateX(180deg); /* 完成翻转 */
        filter: blur(0px); /* 移除模糊效果 */
    }
}
  • perspective: 1000px:为整个翻转效果设置透视深度,使得数字的翻转看起来更加立体。
  • @keyframes flipDown:定义了从 0 到 180 度的翻转过程,翻转过程中加入了模糊效果,模拟翻转的动态过程。

3. JavaScript 动态更新

JavaScript 负责定时更新时钟数字,并触发数字翻转的动画。每秒钟,updateClock 函数会更新时、分、秒的值,并通过 updateDigit 函数触发每个数字的翻转动画。为了平滑过渡,我们为每个数字设置了不同的延迟。

function updateDigit(id, newValue, delay = 0) {
    let topEl = document.getElementById(`${id}-top`);
    let bottomEl = document.getElementById(`${id}-bottom`);

    if (topEl.innerText !== newValue) {
        let flipEl = document.createElement("div");
        flipEl.classList.add("flip");
        flipEl.innerText = topEl.innerText;

        setTimeout(() => {
            flipEl.addEventListener('animationend', () => {
                topEl.innerText = newValue;
                bottomEl.innerText = newValue;
                flipEl.remove();
            });

            topEl.appendChild(flipEl);
        }, delay);
    }
}
  • updateDigit:负责根据时间更新每个数字的显示,并执行翻转动画。通过 setTimeout 控制动画的延迟,确保每个数字的翻转过程不冲突。
  • setInterval(updateClock, 1000):每秒钟调用一次 updateClock 函数,更新时钟显示。

视觉效果与用户体验

  1. 3D 翻转效果:通过 CSS 的 perspectivetransform 属性,使得数字的翻转过程看起来非常立体,类似真实的机械时钟翻页效果。
  2. 模糊过渡:在数字翻转的过程中,我们使用了 blur 过滤器来模拟物理翻转时的视觉模糊,增强了翻转动画的真实感。
  3. 阴影和光影效果:为了增强 3D 效果,每个数字卡片都加上了阴影,给用户带来更强的视觉层次感。

总结

通过结合 HTML、CSS 和 JavaScript,我们成功实现了一个动态翻转时钟,给用户带来了更具视觉冲击力的时钟体验。利用 3D 透视、翻转动画、模糊效果和光影效果等技术,我们不仅完成了功能实现,还增强了用户的沉浸感。这种时钟效果不仅实用,还能为网站添加一份独特的动感元素。

未来,你可以根据这个基础,进一步扩展功能,比如添加数字颜色变化、不同的时间格式显示等,打造更具个性化的时钟效果。

源码获取👇

在这里插入图片描述

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

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

相关文章

RagFlow+Ollama 构建RAG私有化知识库

RagFlowOllama 构建RAG私有化知识库 关于RAG一、什么是RAGFlow一、RAGFlow 安装配置测服已有服务&#xff1a; mysql、redis、elasticsearch 二、RAGFlow 配置 ollama&#xff1a;本地运行大型语言模型的工具软件。用户可以轻松下载、运行和管理各种开源 LLM。降低使用门槛&…

JavaScript(JS)

介绍 JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互 JavaScript 和Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似 JS引入方式 内部脚本:将JS代码定义在HTML页面中 JavaScript代码…

LLM 架构

LLM 分类 : 自编码模型 (encoder) : 代表模型 : BERT自回归模型 (decoder) : 代表模型 : GPT序列到序列模型 (encoder-decoder) : 代表模型 : T5 自编码模型 (AutoEncoder model , AE) 代表模型 : BERT (Bidirectional Encoder Representation from Transformers)特点 : Enc…

剑指 Offer II 023. 两个链表的第一个重合节点

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20023.%20%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%87%8D%E5%90%88%E8%8A%82%E7%82%B9/README.md 剑指 Offer II 023. 两…

【git-hub项目:YOLOs-CPP】本地实现04:项目简化

项目跑通之后,我们常常还需要对我们没有用到的任何内容进行删除,以简化项目体积,也便于我们阅读和后续部署。如何实现呢?本篇博客教会大家实现! 项目一键下载【⬇️⬇️⬇️】: 精简后:【GitHub跑通项目:YOLOs-CPP】+【计算机视觉】+【YOLOv11模型】+【windows+Cpp+ONN…

R语言用逻辑回归贝叶斯层次对本垒打数据与心脏移植数据后验预测检验模拟推断及先验影响分析|附数据代码...

全文链接&#xff1a;https://tecdat.cn/?p40152 在统计学领域中&#xff0c;层次建模是一种极为强大且实用的工具。它能够巧妙地处理复杂的数据结构&#xff0c;通过分层的方式对数据进行建模。在贝叶斯统计的框架内&#xff0c;层次建模优势尽显&#xff0c;其可以有效地融合…

解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器

一、引言 在机器学习的广阔领域中&#xff0c;算法的选择犹如为一场冒险挑选趁手的武器&#xff0c;至关重要。面对海量的数据和复杂的任务&#xff0c;合适的算法能够化繁为简&#xff0c;精准地挖掘出数据背后隐藏的模式与价值。机器学习领域有十大核心算法&#xff0c;而随…

网络工程师 (43)IP数据报

前言 IP数据报是互联网传输控制协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;的数据报格式&#xff0c;由首部和数据两部分组成。 一、首部 IP数据报的首部是控制部分&#xff0c;包含了数据报传输和处理所需的各种信息。首部可以分为固定部分和可变部分。 固定…

部署k8s 集群1.26.0(containerd方式)

随着k8s版本逐步更新&#xff0c;在不支持docker环境的情况下&#xff0c;需要使用containerd方式作为容器引擎。为了更好的个人学习使用&#xff0c;需要重新部署一套1.26.0版本的k8s集群&#xff0c;并且使用containerd方式作为容器引擎&#xff0c;版本为1.6.33。在部署过程…

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通&#xff1a;成立于 2000 年…

HarmonyOS进程通信及原理

大家好&#xff0c;我是学徒小z&#xff0c;最近在研究鸿蒙中一些偏底层原理的内容&#xff0c;今天分析进程通信给大家&#xff0c;请用餐&#x1f60a; 文章目录 进程间通信1. 通过公共事件&#xff08;ohos.commonEventManager&#xff09;公共事件的底层原理 2. IPC Kit能…

openCV中如何实现滤波

图像滤波用于去除噪声和图像平滑&#xff0c;OpenCV 提供了多种滤波器&#xff1a; 1.1. 均值滤波&#xff1a; import cv2# 读取图像 image cv2.imread("example.jpg")# 均值滤波 blurred_image cv2.blur(image, (5, 5)) # (5, 5) 是滤波核的大小 滤波核大小的…

Linux网络 | 多路转接Reactor

前言&#xff1a;本节内容结束Linux网络部分。本节将要简单实现一下多路转接Reactor的代码&#xff0c;制作一个多路转接版本的四则运算计算器服务器。Reactor的代码相当困难&#xff0c;除了350多行新代码&#xff0c; 还要用到我们之前写的许多文件&#xff0c; 比如之前写的…

数控机床设备分布式健康监测与智能维护系统MTAgent

数控机床设备分布式健康监测与智能维护系统MTAgent-v1.1融合了目前各种先进的信号处理以及信息分析算法以算法工具箱的方式&#xff0c;采用了一种开发的、模块化的结构实现信号各种分析处理&#xff0c;采用Python编程语言&#xff0c;满足不同平台需求(包括Windows、Linux)。…

Opencv项目实战:26 信用卡号码识别与类型判定

项目介绍 在日常生活中&#xff0c;信用卡的使用越来越普遍。本项目的主要目标是通过图像处理技术自动识别信用卡号码&#xff0c;并根据信用卡号码的第一个数字判定信用卡的类型&#xff08;如Visa、MasterCard等&#xff09;。项目结合了图像预处理、轮廓检测、模板匹配等技…

利用websocket检测网络连接稳定性

浏览器中打开F12&#xff0c;控制台中输入以下内容 > 回车 > 等待结果 连接关闭 表示断网 let reconnectDelay 1000; // 初始重连间隔 let pingInterval null; let socketManuallyClosed false; // 标志是否手动关闭function createWebSocket() {if (socketManuallyCl…

WPF9-数据绑定进阶

目录 1. 定义2. 背景3. Binding源3.1. 使用Data Context作为Binding的源3.2. 使用LINQ检索结果作为Binding的源 4. Binding对数据的转换和校验4.1. 需求4.2. 实现步骤4.3. 值转换和校验的好处4.3.1. 数据转换的好处 4.4. 数据校验的好处4.5. 原理4.5.1. 值转换器原理4.5.2. 数据…

【Unity Shader编程】之图元装配与光栅化

执行方式&#xff1a;自动完成 图元装配自动化流程 顶点坐标存入装配区 → 按绘制模式连接顶点 → 生成完整几何图元 示例&#xff1a;gl.drawArrays(gl.TRIANGLES, 0, 3)自动生成三角形 会自动自动裁剪超出屏幕范围&#xff08;NDC空间外&#xff09;的三角形&#xff0c;仅保…

ssm121基于ssm的开放式教学评价管理系统+vue(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

网工项目理论1.11 网络出口设计

本专栏持续更新&#xff0c;整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 一.网络出口接入技术 二.单一出口网络结构 三.同运营商多出口结构 四.多运营商多出口结构——出向流量 五.多运营商多出口结构——服务器访问流量 六.多运营商多出口…