当前位置: 首页 > news >正文

实现动态翻转时钟效果的 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 透视、翻转动画、模糊效果和光影效果等技术,我们不仅完成了功能实现,还增强了用户的沉浸感。这种时钟效果不仅实用,还能为网站添加一份独特的动感元素。

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

源码获取👇

在这里插入图片描述

相关文章:

  • 【koa】05-koa+mysql实现数据库集成:连接和增删改查
  • gcc和g++的区别以及明明函数有定义为何链接找不到
  • 7-1 打印沙漏
  • 【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题
  • Python在网络安全中的应用 python与网络安全
  • python环境的yolov11.rknn物体检测
  • 前端VUE+后端uwsgi 环境搭建
  • 算法-栈-删除字符串中的所有相邻重复项
  • 部署k8s 集群1.26.0(containerd方式)
  • SQL优化可以从哪些方面入手
  • 网络基础(持续更新中)
  • 什么是HTTP和HTTPS?它们之间有什么区别?
  • Leetcode 72. 编辑距离
  • UE5 Niagara 粒子远处闪烁解决
  • 告别冷冰冰:如何训练AI写出温暖人心的广告文案
  • 函数重载讲解
  • ios苹果手机使用AScript应用程序实现UI自动化操作,非常简单的一种方式
  • 25化学化工研究生复试面试问题汇总 化学化工专业知识问题很全! 化学化工复试全流程攻略 化学化工考研复试真题汇总
  • 深入理解Python字典(Dictionary):从基础操作到高级应用
  • B. 中位数
  • 中华人民共和国和俄罗斯联邦关于全球战略稳定的联合声明
  • “80后”计算机专家唐金辉已任南京林业大学副校长
  • “20后”比“60后”更容易遭遇极端气候事件
  • 暴雨及强对流天气黄色预警已发布!南方进入本轮降雨最强时段
  • 人民日报钟声:中方维护自身发展利益的决心不会改变
  • 江苏淮安优化村级资源配置:淮安区多个空心村拟并入邻村