利用HTML+CSS+JS打造炫酷时钟网页的完整指南

引言

在现代Web开发中,制作一个引人注目的时钟网页是一种常见而令人愉悦的体验。本文将介绍如何使用HTML、CSS和JavaScript来创建一个炫酷的时钟网页,通过这个项目,你将学到如何结合这三种前端技术,制作一个动态且美观的时钟效果。

步骤一:创建HTML结构

首先,创建HTML文件,定义时钟网页的基本结构:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><link rel="stylesheet" href="css/styles.css" /><title></title></head><body><div class="clock"><div class="hr"><div class="strip"><div class="number">0</div><div class="number">1</div><div class="number">2</div></div><div class="strip"><div class="number">0</div><div class="number">1</div><div class="number">2</div><div class="number">3</div><div class="number">4</div><div class="number">5</div><div class="number">6</div><div class="number">7</div><div class="number">8</div><div class="number">9</div></div></div><div class="min"><div class="strip"><div class="number">0</div><div class="number">1</div><div class="number">2</div><div class="number">3</div><div class="number">4</div><div class="number">5</div></div><div class="strip"><div class="number">0</div><div class="number">1</div><div class="number">2</div><div class="number">3</div><div class="number">4</div><div class="number">5</div><div class="number">6</div><div class="number">7</div><div class="number">8</div><div class="number">9</div></div></div><div class="sec"><div class="strip"><div class="number">0</div><div class="number">1</div><div class="number">2</div><div class="number">3</div><div class="number">4</div><div class="number">5</div></div><div class="strip"><div class="number">0</div><div class="number">1</div><div class="number">2</div><div class="number">3</div><div class="number">4</div><div class="number">5</div><div class="number">6</div><div class="number">7</div><div class="number">8</div><div class="number">9</div></div></div></div><script type="text/javascript" src="js/index.js"></script></body>
</html>

步骤二:美化时钟样式(CSS)

创建一个名为 styles.css 的CSS文件,用于美化时钟的外观:

* {box-sizing: border-box;padding: 0;margin: 0;
}html {place-items: center;
}body {font-family: monospace;font-size: 2rem;min-height: 100vh;display: grid;overflow-y: hidden;place-items: center;background: linear-gradient(-45deg, #c4d2ef, #dfe6f6);
}.hr,
.min,
.sec {display: grid;grid-template-columns: 1fr 1fr;grid-gap: 3rem;grid-row: 1/2;align-items: start;
}.number {padding: 0.5em;width: 4rem;height: 4rem;display: grid;place-items: center;color: #f9fbfd;transition: all 500ms 100ms ease;border-radius: 50%;
}.number.pop {color: #3e6ccb;font-weight: bold;transform: scale(1.3);background-color: #dfe6f6;box-shadow: -10px -10px 20px -5px #f9fbfd, 10px 10px 20px #a9bee8;
}.strip {transition: transform 500ms ease-in-out;border-radius: 8px;background-color: #dfe6f6;box-shadow: -10px -10px 20px -5px #f9fbfd, 10px 10px 20px #a9bee8;
}.clock {display: grid;grid-template-columns: repeat(3, 1fr);grid-gap: 5rem;height: 4rem;position: relative;padding: 0 4rem;
}

步骤三:实现时钟逻辑(JavaScript)

在 index.js 文件中,编写JavaScript代码来获取当前时间,并根据时间更新时钟的指针位置:

const strips = [...document.querySelectorAll(".strip")];
const numberSize = "4"; var lastTime = new Array(-1, -1, -1)function highlight(strip, d) {strips[strip].querySelector(`.number:nth-of-type(${d + 1})`).classList.add("pop");setTimeout(() => {strips[strip].querySelector(`.number:nth-of-type(${d + 1})`).classList.remove("pop");}, 950); 
}function stripSlider(strip, id, number) {let d1 = Math.floor(number / 10);let d2 = number % 10;if (lastTime[id] == -1 || lastTime[id] != number) {strips[strip].style.transform = `translateY(${d1 * -numberSize}rem)`;strips[strip + 1].style.transform = `translateY(${d2 * -numberSize}rem)`;lastTime[id] = number;}highlight(strip, d1);highlight(strip + 1, d2);
}function updateClock() {const time = new Date();const hours = time.getHours();const mins = time.getMinutes();const secs = time.getSeconds();stripSlider(0, 0, hours);stripSlider(2, 1, mins);stripSlider(4, 2, secs);
}setInterval(updateClock, 1000);updateClock();

结语

通过本文的指南,你已经学会如何使用HTML、CSS和JavaScript创建一个炫酷的时钟网页。这个项目结合了这三种前端技术,展示了它们的协同作用。通过这个实践,你不仅提升了前端技术的应用能力,还掌握了制作动态效果的基本原理。希望这个时钟网页项目能够成为你继续学习前端开发的良好起点。

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

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

相关文章

vue 中的watch 的deep属性

在 Vue 中&#xff0c;watch 是一个用于观察和响应 Vue 实例上的数据变化的选项。当你在一个属性上设置 watch 时&#xff0c;Vue 会监视该属性的变化并在变化时执行相应的回调函数。 deep 属性是 watch 选项的一个属性&#xff0c;用于深度观察一个对象的变化。默认情况下&am…

深入探索 Android 中的 Runtime

深入探索 Android 中的 Runtime 一、什么是 Runtime二、Android 中的 Runtime 类型2.1. Dalvik Runtime2.2. ART&#xff08;Android Runtime&#xff09; 三、Runtime 的作用和特点3.1. 应用程序执行环境3.2. 跨平台支持3.3. 性能优化3.4. 应用程序优化 四、与应用开发相关的重…

Unity3D Pico VR 手势识别物体交互 适配 MRTK3

当前Pico已经支持手势识别了&#xff0c;但是提供的PICO Unity Integration SDK 中是没有手势和物体交互的功能&#xff0c;Unity XR Interaction Toolkit提供的手势识别物体交互对 Quest适配的挺好的&#xff0c;Pico 当前只能用指尖点触还不能对物体进行抓握以及手势控制射线…

ubuntu18.04以上版本使用systemd 开启自启动服务

进入/etc/systemd/system/目录&#xff0c;创建myscript.service&#xff0c;并赋予权限 sudo vim /etc/systemd/system/myscript.service [Unit] DescriptionMy Script Service Afternetwork.target [Service] Userroot ExecStart/home/start.sh Restartalways [Install]…

【水文】打印99乘法表

#include <stdio.h> int main() { for (int i 1; i < 9; i) { for (int j 1; j < i; j) { printf("%d*%d%d\t", j, i, i * j); } printf("\n"); } return 0; }

JS-WebAPIs-其他事件(三)

• 页面加载事件 页面加载事件主要有二种事件&#xff0c;分别是load和DOMContentLoaded 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件为什么要学&#xff1f; 有些时候需要等页面资源全部处理完了做一些事情老代码喜欢把 scrip…

JAVA如何创建对象

在 Java 中创建对象的步骤如下&#xff1a; 定义一个类&#xff1a;在 Java 中&#xff0c;所有的对象都是通过类来创建的。因此&#xff0c;首先需要定义一个类&#xff0c;即描述对象的属性和行为。 声明变量&#xff1a;要创建一个对象&#xff0c;需要先声明一个变量来保存…

Spring MVC的面试知识点

1、Spring MVC的入口是什么&#xff1f; Spring MVC的入口是DispatcherServlet。这个Servlet是Spring MVC框架的关键组件&#xff0c;负责接收所有来自客户端的请求&#xff0c;并将其分派给适当的Controller对象进行处理。在Spring MVC框架中&#xff0c;所有的请求都会经过D…

redisson-spring-boot-starter 自动化配置源码解析

版本 redisson-spring-boot-starter:3.25.2 此starter会自动注册RedissonClient Bean 并可通过注册RedissonAutoConfigurationCustomizer Bean实现配置自定义 BeanRedissonAutoConfigurationCustomizer jdkCodecCustomizer() {return configuration->{// 使用JDK序列化器c…

Hadoop详解

Hadoop 概念 就是一个大数据解决方案。它提供了一套分布式系统基础架构。 核心内容包含 hdfs 和mapreduce。hadoop2.0 以后引入 yarn. hdfs 是提供数据存储的&#xff0c;mapreduce 是方便数据计算的。 hdfs 又对应 namenode 和 datanode. namenode 负责保存元数据的基本信息…

移动端自适应解决方法(adaptive插件,原理是rem布局)

点击跳转官方Git地址 此博客参考笔记 也可以直接复制下方的js文件直接使用 index.js var adaptive {}; (function (win, lib) {var doc win.document;var docEl doc.documentElement;// 设备像素比var devicePixelRatio win.devicePixelRatio;// 我们设置的布局视口与理…

docker使用Dockerfile制做容器(以hyperf为列,开机启动)

1、Dockerfile文件 FROM hyperf/hyperf:8.1-alpine-v3.18-swoole WORKDIR /data MAINTAINER dade <dadeqq.com> ADD start.sh start.sh RUN chmod x ./start.sh CMD /data/start.sh1-1、执行命令生成hyperf:latest容器&#xff08;文件名是Dockerfile可以省略&#xff0…

YZ系列工具之YZ04:文本批量替换使用说明文档

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…

解锁新身份:无忧秘书智脑-AI智能直播的10宫格姓氏头像制作秘籍

在这个信息爆炸的时代&#xff0c;一个独特的标识是个人或品牌在众多竞争者中脱颖而出的关键。而头像作为我们日常在线身份的一部分&#xff0c;更是我们展示个性和风格的重要窗口。无忧秘书智脑-AI智能直播最新推出的专属姓氏10宫格头像功能&#xff08;ai6ai69)&#xff0c;为…

【Python学习】Python学习21- 正则表达式(2)

目录 【Python学习】Python学习21- 正则表达式&#xff08;2&#xff09; 前言字符串检索和替换repl 参数是一个函数参考 文章所属专区 Python学习 前言 本章节主要说明Python的正则表达式。 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与…

MySQL缓冲池(Buffer Pool)深入解析:原理、组成及其在数据操作中的核心作用

在关系型数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;性能优化一直是数据库管理员和开发者关注的焦点。作为最流行的开源RDBMS之一&#xff0c;MySQL提供了多种优化手段&#xff0c;其中InnoDB存储引擎的缓冲池&#xff08;Buffer Pool&#xff09;是最为关键的…

小埋公司的IPO方案的题解

目录 原题描述&#xff1a; 题目描述 输入格式 输出格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 提示 题目大意&#xff1a; 主要思路&#xff1a; 但是but 代码code&#xff1a; 时间限制: 500ms 空间限制: 65536kB 原题…

pytest 参数化测试用例构建

在之前的文章中主要分享了 pytest 的实用特性&#xff0c;接下来讲 Pytest 参数化用例的构建。 如果待测试的输入与输出是一组数据&#xff0c;可以把测试数据组织起来用不同的测试数据调用相同的测试方法。参数化顾名思义就是把不同的参数&#xff0c;写到一个集合里&#xf…

Apipost智能Mock教程

在接口开发过程中&#xff0c;Mock功能可以帮助开发者快速测试和验证接口的正确性和稳定性&#xff0c;以便快速迭代和修复问题。Apipost推出智能Mock功能&#xff0c;可以在智能期望中填写一些触发条件&#xff0c;开启后&#xff0c;Apipost会根据已设置的触发条件&#xff0…

自定义服务自启动失败

如果你已经使用 systemctl enable postgres.service 启用了服务的自启动&#xff0c;但重启后服务没有自动启动&#xff0c;可能有几种原因&#xff1a; 启动顺序问题&#xff1a; 如果 PostgreSQL 服务依赖于其他服务&#xff0c;可能在其依赖项启动之前尝试启动。你可以通过…