圣诞快乐(h5 css js(圣诞树))

news2024/12/24 13:25:47

一,整体设计思路

圣诞树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(简易)

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

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

相关文章

行业观察|西门子收购Altair:从多学科仿真到工业元宇宙

在当今数字化时代&#xff0c;工业领域正经历着深刻的变革。而CAE软件作为工业领域关键工具&#xff0c;在产品设计、验证和优化等环节发挥着越来越重要的作用。 11月&#xff0c;西门子宣布收购Altair的新闻屠版了整个朋友圈&#xff0c;无疑验证了CAE在制造业的核心地位。对A…

【Verilog】UDP用户原语

User-defined primitives 概述基本语法组合逻辑的UDP时序逻辑的UDPUDP 符号表 Verilog HDL&#xff08;简称 Verilog &#xff09;是一种硬件描述语言&#xff0c;用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog 不仅定义了语法&…

计算机网络压缩版

计算机网络到现在零零散散也算过了三遍&#xff0c;一些协议大概了解&#xff0c;但总是模模糊糊的印象&#xff0c;现在把自己的整体认识总结一下&#xff0c;&#xff08;本来想去起名叫《看这一篇就够了》&#xff0c;但是发现网上好的文章太多了&#xff0c;还是看这篇吧&a…

单元测试使用记录

什么是单元测试 简单来说就是对一个类中的方法进行测试&#xff0c;对输出的结果检查判断是否符合预期结果 但是在多年的工作中&#xff0c;从来没有哪个项目中真正系统的用到了单元测试&#xff0c;因此对它还是很陌生的&#xff0c;也就造成更加不会在项目中区使用它。 如何…

bridge between Lua world and the .NET

一、新建项目&#xff1a;luademo 安装包&#xff1a;<PackageReference Include"NLua" Version"1.7.3" /> using NLua; using System;namespace luademo {internal class Program{static void Main(string[] args){Lua state new Lua();for (int …

路径规划之启发式算法之二十三:免疫算法(Immune Algorithm,IA)

免疫算法(Immune Algorithm,IA)是基于人工免疫系统的理论,受生物免疫系统的启发而推出的一种新型的智能搜索算法。通过模拟生物免疫系统的工作原理来解决优化问题。 一、定义与原理 免疫算法是以人工免疫系统的理论为基础,实现了类似于生物免疫系统的抗原识别、细胞分化、…

2.5.1 文件管理基本概念

文章目录 文件文件系统文件分类 文件 文件&#xff1a;具有符号名&#xff0c;逻辑上有完整意义的一组相关信息的集合。 文件包含文件体、文件说明两部分。文件体存储文件的真实内容&#xff0c;文件说明存放操作系统管理文件所用的信息。 文件说明包含文件名、内部标识、类型、…

C#调用WebService的方法

一、前言 在日常工作中&#xff0c;如果涉及到与第三方进行接口对接&#xff0c;有的会使用WebService的方式&#xff0c;这篇文章主要讲解在.NET Framework中如何调用WebService。 1.创建WebService &#xff08;1&#xff09;新建项目——模板选择ASP.NET Web 应用程序 &a…

(免费源码)基于springboot的电影院订票系统设计与实现 计算机毕业设计 P10089

项目说明 本号所发布的项目均由我部署运行验证&#xff0c;可保证项目系统正常运行&#xff0c;以及提供完整源码。 如需要远程部署/定制/讲解系统&#xff0c;可以联系我。定制项目未经同意不会上传&#xff01; 项目源码获取方式放在文章末尾处 注&#xff1a;项目仅供学…

python 定时任务管理封装

主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器&#xff0c;此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器&#xf…

国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案

随着科技高速发展&#xff0c;视频信号经过数字压缩&#xff0c;通过互联网宽带或者移动4G网络传递&#xff0c;可实现远程视频监控功能。将这一功能运用于施工现场安全管理&#xff0c;势必会大大提高管理效率&#xff0c;提升监管层次。而这些&#xff0c;通过Liveweb监控系统…

C++----------函数的调用机制

栈帧的创建与销毁 栈帧创建过程 当一个函数被调用时&#xff0c;系统会在程序的栈空间中为该函数创建一个栈帧。首先&#xff0c;会将函数的返回地址&#xff08;即调用该函数的下一条指令的地址&#xff09;压入栈中&#xff0c;这确保函数执行完后能回到正确的位置继续执行后…

【Leetcode】855. 考场就座

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 在考场里&#xff0c;有 n n n 个座位排成一行&#xff0c;编号为 0 0 0 到 n − 1 n - 1 n−1。 当学生进入考场后&#xff0c;他必须坐在离最近的人最远的座位上。如果有多个…

Unity引擎学习总结------动画控件

左侧窗格可以在参数视图和图层视图之间切换。参数视图允许您创建、查看和编辑动画控制器参数。这些是您定义的变量&#xff0c;用作状态机的输入。要添加参数&#xff0c;请单击加号图标并从弹出菜单中选择参数类型。要删除参数&#xff0c;请在列表中选择该参数并按删除键&…

UE4_用户控件_1_滑块控制图像颜色的变化

祝愿大美兰陵越来越好&#xff0c;祝愿祖国繁荣昌盛&#xff0c;祝愿人民幸福安康&#xff01; 一、样式展示&#xff1a; 效果&#xff0c;当角色靠近物体&#xff08;只有一个胶囊碰撞体&#xff09;时显示用户控件&#xff0c;调整控件中的滑块值&#xff0c;可以改变UE4lo…

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

一、概述 记录时间 [2024-12-18] 前置文章&#xff1a;网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 本文讲述网络编程相关知识——IP 地址&#xff0c;包括 IP 地址的作用、分类&#xff…

【pycharm】远程服务器之后如何打开终端

【pycharm】远程服务器之后如何打开终端 在pycharm中&#xff0c;我们通过远程连接服务器&#xff0c;此时如果我们需要在终端运行的话&#xff0c;并不能直接在本地终端运行&#xff0c;而是需要连接到服务器终端才能运行命令 设置如下&#xff1a; 输入服务器的ip、端口、…

C#+OpenCv深度学习开发(常用模型汇总)

在使用 OpenCvSharp 结合深度学习进行机器视觉开发时&#xff0c;有许多现成的模型可以使用。以下是一些常用的深度学习模型&#xff0c;适用于不同的机器视觉任务&#xff0c;包括物体检测、图像分类和分割等。 使用示例 在 OpenCvSharp 中加载和使用这些模型的基本示例&…

dolphinscheduler服务注册中心源码解析(三)RPC提供者服务整合注册中心注册服务实现源码

RPC提供者服务整合注册中心注册服务实现源码 1.概述2.源码解读思路3.实现2.1.应用服务的RPC服务接口定义2.1.1.MasterServer应用中提供的RPC接口服务2.1.2.WorkerServer应用中提供的RPC接口服务2.2.应用服务的RPC服务接口实现2.2.1.MasterServer应用中提供的RPC接口服务实现类2…

重生之我在异世界学编程之C语言:数据在内存中的存储篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 引言正文一、数据类型介绍1.内置类型2.自定义…