一,整体设计思路
圣诞树h5(简易)
1.页面布局与样式:
页面使用了全屏的黑色背景,中央显示圣诞树,树形由三层绿色的三角形组成,每一层的大小逐渐变小。树干是一个棕色的矩形,位于三角形的底部。
2.动态元素
装饰球:通过 JavaScript 动态添加,每个装饰球都是一个红色的圆形,并且使用 @keyframes
实现闪烁效果。装饰球的位置和颜色是随机的,当用户点击装饰球时会弹出提示框。雪花:通过 JavaScript 动态添加雪花,雪花是白色的小圆形,使用 @keyframes
让雪花从屏幕顶部落下,落下速度是随机的。
3.动画与交互:
a.闪烁动画:装饰球通过 CSS 的 @keyframes
实现闪烁效果,让它们看起来像闪烁的灯泡。雪花下
b.落动画:雪花也使用了类似的动画,使它们从屏幕上方逐渐掉落至屏幕底部。
c.随机效果:装饰球的颜色、位置、雪花的数量和动画时长都是随机生成的,使每次加载页面时都呈现不同的效果。
详细解释 会放在代码注释里面。
二,整体代码
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>圣诞树</title> <style> /* 设置页面的基本样式,居中显示并设置黑色背景 */ body { margin: 0; padding: 0; background-color: #000; /* 背景颜色为黑色 */ color: #fff; /* 字体颜色为白色 */ font-family: Arial, sans-serif; /* 设置字体 */ display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ height: 100vh; /* 高度为视口的100% */ overflow: hidden; /* 防止滚动条 */ } /* 树的容器样式 */ .tree { position: relative; width: 0; height: 0; margin-top: -50px; /* 调整树的位置 */ } /* 树叶的层样式 */ .triangle { position: absolute; width: 0; height: 0; border-left: 100px solid transparent; border-right: 100px solid transparent; } /* 每一层树叶的样式 */ .layer1 { border-bottom: 150px solid green; /* 第一层绿色树叶 */ top: 0; left: -80px; /* 居中对齐 */ } .layer2 { border-bottom: 130px solid green; /* 第二层树叶 */ top: 100px; left: -80px; } .layer3 { border-bottom: 110px solid green; /* 第三层树叶 */ top: 180px; left: -80px; } /* 树干样式 */ .trunk { position: absolute; top: 290px; /* 树干位置 */ width: 40px; height: 60px; background-color: brown; /* 树干颜色 */ } /* 装饰球样式 */ .ornament { position: absolute; width: 20px; height: 20px; background-color: red; /* 红色装饰球 */ border-radius: 50%; /* 圆形 */ box-shadow: 0 0 10px rgba(255, 0, 0, 0.7); /* 发光效果 */ animation: blink 2s infinite alternate; /* 让装饰球闪烁 */ } /* 定义闪烁效果 */ @keyframes blink { to { opacity: 0.2; /* 透明度变化 */ } } /* 雪花样式 */ .snowflake { position: absolute; top: -20px; /* 雪花从顶部开始 */ width: 10px; height: 10px; background-color: white; /* 雪花颜色为白色 */ border-radius: 50%; /* 圆形 */ box-shadow: 0 0 10px rgba(255, 255, 255, 0.9); /* 发光效果 */ animation: fall linear infinite; /* 雪花下落动画 */ } /* 定义雪花下落效果 */ @keyframes fall { 100% { transform: translateY(100vh); /* 让雪花下落到视口底部 */ } } </style></head><body> <!-- 圣诞树容器 --> <div class="tree"> <div class="triangle layer1"></div> <!-- 第一层 --> <div class="triangle layer2"></div> <!-- 第二层 --> <div class="triangle layer3"></div> <!-- 第三层 --> <div class="trunk"></div> <!-- 树干 --> </div> <script> // 动态添加装饰球和雪花 const tree = document.querySelector('.tree'); const totalOrnaments = 20; // 圣诞树上的装饰球数量 const totalSnowflakes = 50; // 雪花的数量 // 创建装饰球 function createOrnaments() { for (let i = 0; i < totalOrnaments; i++) { const ornament = document.createElement('div'); ornament.classList.add('ornament'); ornament.style.left = `${Math.random() * 180 - 80}px`; // 随机位置 ornament.style.top = `${Math.random() * 280}px`; // 随机位置 ornament.style.backgroundColor = getRandomColor(); // 随机颜色 tree.appendChild(ornament); // 点击事件:点击装饰球时弹出提示 ornament.addEventListener('click', () => { alert('你点击了一个装饰球!'); }); } } // 创建雪花 function createSnowflakes() { for (let i = 0; i < totalSnowflakes; i++) { const snowflake = document.createElement('div'); snowflake.classList.add('snowflake'); snowflake.style.left = `${Math.random() * window.innerWidth}px`; // 随机位置 snowflake.style.animationDuration = `${Math.random() * 5 + 3}s`; // 随机动画持续时间 document.body.appendChild(snowflake); } } // 获取随机颜色 function getRandomColor() { const colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF']; return colors[Math.floor(Math.random() * colors.length)]; } // 初始化圣诞场景 createOrnaments(); createSnowflakes(); </script></body></html>
三,详细解释
I 大树部分
<body> <div class="tree"> <div class="triangle layer1"></div> <div class="triangle layer2"></div> <div class="triangle layer3"></div> <div class="trunk"></div> </div></body>
一棵大树,里面有树干和树叶部分,树叶部分用triangle类名,并在css当中把它绘制成三角形。
.triangle { position: absolute; width: 0; height: 0; border-left: 100px solid transparent; border-right: 100px solid transparent;}
layer表示层级 有三层,trunk类名的div是树干。
//树干.trunk { position: absolute; top: 290px; width: 40px; height: 60px; background-color: brown;}
II 动画效果
动态装饰球(Ornaments)这个是随机生成的。
function createOrnaments() { for (let i = 0; i < totalOrnaments; i++) { const ornament = document.createElement('div'); ornament.classList.add('ornament'); ornament.style.left = `${Math.random() * 180 - 80}px`; ornament.style.top = `${Math.random() * 280}px`; ornament.style.backgroundColor = getRandomColor(); tree.appendChild(ornament); ornament.addEventListener('click', () => { alert('你点击了一个装饰球!'); }); }}
装饰球闪烁效果(CSS 动画)
@keyframes blink { to { opacity: 0.2; }}
动态雪花效果
function createSnowflakes() { for (let i = 0; i < totalSnowflakes; i++) { const snowflake = document.createElement('div'); snowflake.classList.add('snowflake'); snowflake.style.left = `${Math.random() * window.innerWidth}px`; snowflake.style.animationDuration = `${Math.random() * 5 + 3}s`; document.body.appendChild(snowflake); }}
createSnowflakes
函数生成了 50 个雪花(totalSnowflakes = 50
)。每个雪花是一个小圆形的 div
元素,位置是随机的,雪花的 left
值根据窗口宽度随机生成。animationDuration
设置了雪花的下落时间,使每片雪花的下落速度不同。
随机颜色生成(JavaScript 函数)
function getRandomColor() { const colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF']; return colors[Math.floor(Math.random() * colors.length)];}
提前祝福大家 圣诞快乐
效果:
圣诞树h5(简易)