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

HTML元素周期表

image-20250903210544187

写在前面

用HTML、CSS与JavaScript构建一个可交互的三维元素周期表,让化学之美在浏览器中跃然呈现。

系列文章

序号目录
1HTML满屏跳动的爱心
2HTML五彩缤纷的爱心
3HTML满屏漂浮爱心
4HTML情人节爱心
5HTML蓝色爱心射线
6HTML跳动的爱心
7HTML跳动的双爱心
8HTML粒子爱心
9HTML蓝色动态爱心
10HTML橙色动态粒子爱心
11HTML旋转爱心
12HTML爱情树
13HTML元素周期表
14HTML飞舞的花瓣
15HTML星空特效
16HTML黑客帝国字母雨
17HTML哆啦A梦
18HTML流星雨
19HTML沙漏爱心
20HTML爱心字母雨
21HTML爱心流星雨
22HTML生日蛋糕
23HTML流光爱心
24HTML粉色爱心
25HTML满屏飘字
26HTML飞舞爱心
27HTML音乐圣诞树
28HTML星空圣诞树
29HTML礼物圣诞树
30HTML旋转圣诞树
31HTML旋转相册①
32HTML旋转相册②
33HTML旋转相册③
34HTML大雪纷飞①
35HTML大雪纷飞②
36HTML炫酷烟花①
37HTML炫酷烟花②
38HTML炫酷烟花③
39HTML炫酷烟花④
40HTML炫酷烟花⑤
41HTML炫酷烟花⑥
42HTML炫酷烟花⑦
43HTML炫酷烟花⑧
44HTML炫酷烟花⑨
45HTML金色流星雨
敬请期待……

技术需求

  1. Three.js核心架构
  • 场景与相机:使用PerspectiveCamera创建具有景深效果的三维视角,结合Scene容器组织所有元素,构建立体空间感。
  • CSS3D渲染器:通过CSS3DRenderer将DOM元素作为三维对象渲染,实现轻量级且兼容性良好的3D视觉效果,避免WebGL复杂着色器编写。
  • 动画循环:利用requestAnimationFrame持续驱动动画帧更新,确保交互流畅自然。
  1. 交互与控制机制
  • 轨道控制器:引入TrackballControls实现鼠标拖拽旋转、缩放与平移功能,提升用户探索自由度。
  • 响应式设计:监听窗口大小变化,动态调整相机比例和渲染器尺寸,适配不同屏幕设备。
  1. 布局与变换系统
  • 多形态布局:预设“表格”“球体”“螺旋”“网格”四种空间排列模式,每种布局通过数学公式精确计算各元素位置。
  • 缓动动画:借助TWEEN.js实现元素在不同布局间平滑过渡,采用指数缓动(Exponential.InOut)增强视觉张力与节奏感。
  1. 数据结构与对象管理
  • 周期表数据建模:将元素符号、名称、原子量、族、周期等信息以线性数组存储,通过步长5遍历提取,结构清晰高效。
  • 对象封装:为每个元素创建独立的CSS3DObject,并维护其在不同状态下的目标位置数组,便于动画调度。
  1. 视觉样式与用户体验
  • 动态背景与光影:黑色背景凸显科技感,元素卡片采用青蓝色辉光与边框,模拟未来主义UI风格。
  • 悬停反馈:利用CSS:hover增强交互提示,光晕扩大与边框高亮提升可操作性。
  • 按钮导航:底部固定菜单提供一键切换布局功能,按钮具备清晰的状态反馈,提升操作直觉性。
  1. 性能优化策略
  • 批量动画管理:使用TWEEN.removeAll()防止动画叠加,避免内存泄漏与卡顿。
  • 分层渲染:仅在必要时调用render(),通过事件监听减少无效重绘,保障运行效率。

主要代码

创作不易,订阅后可查看完整代码

  • 《Python趣味编程》
  • 《C/C++趣味编程》
  • 《HTML趣味编程》
  • 《Java趣味编程》
<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><title>periodic table of elements</title><style>html,body {height: 100%;}body {background-color: #000000;margin: 0;font-family: Helvetica, sans-serif;;overflow: hidden;}a {color: #ffffff;}#info {position: absolute;width: 100%;color: #ffffff;padding: 5px;font-family: Monospace;font-size: 13px;font-weight: bold;text-align: center;z-index: 1;}#menu {position: absolute;bottom: 20px;width: 100%;text-align: center;}.element {width: 120px;height: 160px;box-shadow: 0px 0px 12px rgba(0, 255, 255, 0.5);border: 1px solid rgba(127, 255, 255, 0.25);text-align: center;cursor: default;}.element:hover {box-shadow: 0px 0px 12px rgba(0, 255, 255, 0.75);border: 1px solid rgba(127, 255, 255, 0.75);}.element .number {position: absolute;top: 20px;right: 20px;font-size: 12px;color: rgba(127, 255, 255, 0.75);}.element .symbol {position: absolute;top: 40px;left: 0px;right: 0px;font-size: 60px;font-weight: bold;color: rgba(255, 255, 255, 0.75);text-shadow: 0 0 10px rgba(0, 255, 255, 0.95);}.element .details {position: absolute;bottom: 15px;left: 0px;right: 0px;font-size: 12px;color: rgba(127, 255, 255, 0.75);}button {color: rgba(127, 255, 255, 0.75);background: transparent;outline: 1px solid rgba(127, 255, 255, 0.75);border: 0px;padding: 5px 10px;cursor: pointer;}button:hover {background-color: rgba(0, 255, 255, 0.5);}button:active {color: #000000;background-color: rgba(0, 255, 255, 0.75);}
</style>
</head>
……

创作流程

我设计这个项目时,心中想的不只是展示一张化学课本上的周期表,而是希望它能“活”起来——成为一个可以走进去、可以旋转观察、可以感受其结构之美的数字空间。我想要打破二维表格的局限,让用户像宇航员一样,在由元素构成的星系中穿行。

一开始,我决定放弃传统的静态网页思路,转而构建一个三维世界。黑色背景是我刻意选择的“宇宙画布”,每一个元素都是一颗漂浮的星球,拥有自己的位置、亮度与轨迹。我用HTML的div元素作为每个元素的载体,再通过CSS赋予它们发光的边框与悬浮的文字,让它们看起来像是未来科技面板上的信息块。

接下来是布局的设计。我首先还原了标准周期表的排列方式,根据族和周期计算每个元素的坐标,让它们整齐地排列成熟悉的形状。但这还不够。我想展示周期律背后的数学之美,于是开始构思其他形态:能不能把所有元素排成一个完美的球体?像原子轨道一样环绕?于是我在脑海中画出一个球面,用经纬度公式分配每个元素的位置,让它们从四面八方汇聚成一个发光的天体。

然后是螺旋结构的灵感。我想到DNA双螺旋,也想到星系的旋臂,于是尝试用极坐标让元素沿着螺旋线上升,每下降一段就旋转一定角度,形成一种动态上升的视觉节奏。最后是网格布局,我把元素按批次分层,像图书馆的书架一样整齐堆叠,形成一种秩序井然的科技感。

最让我着迷的是切换动画。我不想让布局变化显得生硬,于是我引入了缓动函数,让每个元素以不同的速度飞向新位置,有的快、有的慢,形成一种“粒子流”的美感。这种随机延迟让整体动画更有生命力,仿佛这些元素真的有意识地在重组自己。

交互性也是我关注的重点。我加入了轨道控制器,让用户可以用鼠标自由旋转整个周期表,从任意角度观察。我还设置了底部按钮,一键切换不同形态,就像在切换宇宙的不同维度。每一次点击,都是一次视觉的盛宴。

在整个过程中,我不断调试位置、颜色、动画时长,甚至元素卡片的透明度和光晕强度,只为让整体氛围既科学又梦幻。这不是一个冷冰冰的数据展示,而是一场关于物质本源的诗意旅程。当我最终看到所有元素从混乱的初始状态缓缓归位成一张完整的周期表时,那种秩序诞生的震撼,让我深深体会到编程与科学结合的魅力。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

http://www.xdnf.cn/news/19728.html

相关文章:

  • 【C++】C++入门—(中)
  • ASP.NET Web Forms 实战:用 RadioButton 打造“性别/称谓选择”表单的最佳实践
  • 【数据结构】1绪论
  • 【Qt中信号槽连接connect有接收者和无接收者的区别】
  • 执行一条select语句期间发生了什么?
  • 常用符号 Emoji 对照表——Unicode UTF-8
  • CSS Sass Less 样式.xxx讲解
  • SpringMVC的请求接收与结果响应
  • 华为HCIE数通含金量所剩无几?考试难度加大?
  • 数据库选择有讲究?SQLite、PostgreSQL还是MySQL?
  • 电脑接入企业中的网线,为啥网卡上面显示AD域名
  • MongoDB 聚合查询超时:索引优化与分片策略的踩坑记录
  • 国产CAD皇冠CAD(CrownCAD)建模教程:汽车驱动桥
  • 二、Scala流程控制:分支与循环
  • 波浪模型SWAN学习(2)——波浪浅化模拟(Shoaling on sloping beach)
  • RoPE频率缩放机制:解密大语言模型上下文扩展的核心算法
  • linux之IO存储子系统全流程分析
  • 差分隐私在运营指标:ABP 的 DP 计数器与噪声预算
  • 使用PyTorch构建全连接神经网络实现MNIST手写数字分类
  • 【面试题】 如何处理中文分词?
  • LeetCode 2486.追加字符以获得子序列
  • ubuntu的2T新硬盘分区、格式化并挂载
  • Python进阶第三方库之Numpy
  • GO : cannot find module
  • 【音视频】 RGB 格式详解
  • 1.Linux:命令提示符,history和常用快捷键
  • 程序员之电工基础-初尝线扫相机
  • 百度发布Comate AI IDE,我要把Cursor卸载了!
  • AI生成PPT工具排名:2025年高效办公新选择
  • 【项目】分布式Json-RPC框架 - 应用层实现