LINUXDO恭贺新春抛砖引玉版

LINUXDO恭贺新春抛砖引玉版:https://linuxdo.haiquan123.workers.dev/

由C3.5+o1-mini制作,未做移动端适配(基础太差不知道咋搞)

PixPin_2024-12-31_01-10-50

代码开源,大家感兴趣可以修改一下

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>LINUX DO 恭贺新春</title>
    <!-- 引入 Google 字体 ZCOOL KuaiLe -->
    <link href="https://fonts.googleapis.com/css2?family=ZCOOL+KuaiLe&display=swap" rel="stylesheet">
    <style>
        /* 全局样式 */
        body {
            background-color: #1a1a1a;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            overflow: hidden;
            position: relative;
            font-family: 'SimSun', '宋体', serif; /* 保持现有字体 */
        }

        /* 标题样式 */
        .header {
            color: #FFD700;
            font-size: 48px;
            font-weight: bold;
            text-align: center;
            margin-bottom: 150px;  /* 增加底部间距 */
            position: absolute;
            top: 20px;  /* 向上移动标题 */
            text-shadow: 0 0 10px #FF4500,
                         0 0 20px #FF4500,
                         0 0 30px #FF4500;
            animation: glow 2s ease-in-out infinite alternate;
            z-index: 3;
        }

        /* 烟花Canvas样式 */
        #fireworks-canvas {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            pointer-events: none; /* 让Canvas不阻挡鼠标事件 */
            z-index: 1;
        }

        /* 灯笼容器样式 */
        .lantern-container {
            display: flex;
            justify-content: center;
            gap: 1000px; /* 增加左右灯笼组之间的间距 */
            z-index: 2;
        }

        /* 灯笼组样式 */
        .lantern-group {
            position: relative;
        }

        /* 锚点样式 */
        .anchor-point {
            position: relative;
            width: 1px;
            height: 1px;
            top: -150px;
        }

        /* 第二个灯笼的锚点 */
        .anchor-point.second {
            left: -120px; /* 增加左边灯笼之间的间距 */
            top: -180px;
        }

        /* 右侧灯笼组的锚点 */
        .anchor-point.right {
            left: 120px; /* 增加右边灯笼之间的间距 */
        }

        .anchor-point.right.second {
            left: 240px; /* 增加右边灯笼之间的间距 */
            top: -180px;
        }

        /* 绳子和灯笼的容器样式 */
        .string-and-lantern {
            position: absolute;
            transform-origin: top left;
            animation: swingInWindLeft 4s ease-in-out infinite;
        }

        /* 第二个灯笼的动画延迟 */
        .string-and-lantern.second {
            animation: swingInWindLeft 4s ease-in-out infinite 0.5s;
        }

        /* 右侧灯笼组的样式 */
        .string-and-lantern.right {
            animation: swingInWindRight 4s ease-in-out infinite;
        }

        .string-and-lantern.right.second {
            animation: swingInWindRight 4s ease-in-out infinite 0.5s;
        }

        /* 绳子样式 */
        .curved-string {
            position: absolute;
            top: 0;
            left: 0;
            width: 4px;
            height: 120px;
            background-color: #8B4513;
            transform-origin: top;
        }

        /* 灯笼样式 */
        .lantern {
            position: absolute;
            top: 115px;
            left: -75px;
            width: 150px;
            height: 150px;
            background: radial-gradient(circle at center, #ff3333 0%, #ff0000 50%, #cc0000 100%);
            border-radius: 50%;
            box-shadow: 0 0 20px rgba(255, 0, 0, 0.5);
            display: flex;
            justify-content: center;
            align-items: center;
        }

        /* 灯笼顶部和底部的装饰 */
        .lantern::before, .lantern::after {
            content: '';
            position: absolute;
            left: 50%;
            transform: translateX(-50%);
            width: 80px;
            height: 30px;
            background-color: #8B4513;
            border-radius: 10px;
        }

        .lantern::before {
            top: -20px;
            border-radius: 10px 10px 0 0;
        }

        .lantern::after {
            bottom: -20px;
            border-radius: 0 0 10px 10px;
        }

        /* 灯笼文字样式 */
        .lantern-text {
            position: relative;
            z-index: 2;
            color: #FFD700;
            font-family: 'ZCOOL KuaiLe', cursive; /* 使用 ZCOOL KuaiLe 字体 */
            font-size: 24px;
            font-weight: bold;
            text-align: center;
            line-height: 1.2;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
        }

        .chinese-text {
            font-family: 'SimSun', '宋体', serif;
            font-size: 32px;
        }

        /* 灯光效果 */
        .light {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 120px;
            height: 120px;
            background: radial-gradient(circle, rgba(255,255,0,0.7) 0%, rgba(255,165,0,0.3) 100%);
            border-radius: 50%;
            animation: flicker 1s infinite alternate;
        }

        .light.second {
            animation: flicker 1s infinite alternate 0.5s;
        }

        /* 流苏容器样式 */
        .tassels {
            position: absolute;
            bottom: -50px;
            left: 50%;
            transform: translateX(-50%);
            width: 80px;
            height: 50px;
            display: flex;
            justify-content: space-around;
        }

        /* 流苏样式 */
        .tassel {
            width: 2px;
            height: 100%;
            background-color: #FFD700;
            position: relative;
            transform-origin: top;
            animation: tasselWave 2s ease-in-out infinite;
        }

        .second .tassel {
            animation-delay: 0.5s;
        }

        .tassel:nth-child(2) { animation-delay: 0.2s; }
        .tassel:nth-child(3) { animation-delay: 0.4s; }
        .tassel:nth-child(4) { animation-delay: 0.6s; }
        .tassel:nth-child(5) { animation-delay: 0.8s; }

        /* 摆动动画 */
        @keyframes swingInWindLeft {
            0% { transform: rotate(0deg); }
            50% { transform: rotate(15deg); }
            100% { transform: rotate(0deg); }
        }

        @keyframes swingInWindRight {
            0% { transform: rotate(0deg); }
            50% { transform: rotate(-15deg); }
            100% { transform: rotate(0deg); }
        }

        /* 灯光闪烁动画 */
        @keyframes flicker {
            0% { opacity: 0.7; }
            100% { opacity: 1; }
        }

        /* 流苏摆动动画 */
        @keyframes tasselWave {
            0%, 100% { transform: rotate(0deg); }
            50% { transform: rotate(8deg) translateX(2px); }
        }

        /* 标题发光动画 */
        @keyframes glow {
            from {
                text-shadow: 0 0 10px #FF4500,
                           0 0 20px #FF4500,
                           0 0 30px #FF4500;
            }
            to {
                text-shadow: 0 0 20px #FF4500,
                           0 0 30px #FF4500,
                           0 0 40px #FF4500;
            }
        }

        /* 倒计时容器样式 */
        .countdown-container {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            padding: 20px 30px;
            border-radius: 10px;
            background: rgba(0, 0, 0, 0.7); /* 半透明的背景 */
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); /* 阴影效果 */
            z-index: 4; /* 在所有元素之上 */
        }

        /* 倒计时主标题样式 */
        .countdown-container h1 {
            font-size: 2.5em;
            margin-bottom: 15px;
            color: #FFD700;
            text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5); /* 给标题增加阴影 */
            font-family: 'ZCOOL KuaiLe', cursive; /* 使用计时组件的字体 */
        }

        /* 倒计时内容样式 */
        .countdown-container .time, 
        .countdown-container .cny-date, 
        .countdown-container .countdown {
            font-size: 1.5em;
            margin: 10px 0;
            color: #FFD700; /* 保持字体颜色一致 */
            font-family: 'ZCOOL KuaiLe', cursive; /* 保持字体一致 */
            text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5);
        }
    </style>
</head>
<body>
    <!-- 烟花Canvas背景 -->
    <canvas id="fireworks-canvas"></canvas>

    <!-- 标题 -->
    <div class="header">LINUX DO 恭贺新春</div>

    <!-- 倒计时容器 -->
    <div class="countdown-container">
        <h1>蛇年倒计时</h1>
        <!-- 当前时间 -->
        <div class="time">当前时间:<span id="currentTime">--:--:--</span></div>
        <!-- 蛇年的日期 -->
        <div class="cny-date">蛇年:<span id="cnyDate">--</span></div>
        <!-- 蛇年倒计时 -->
        <div class="countdown">倒计时:<span id="countdown">--天 --小时 --分钟 --秒</span></div>
    </div>

    <!-- 灯笼容器 -->
    <div class="lantern-container">
        <!-- 左边灯笼组 -->
        <div class="lantern-group">
            <div class="anchor-point">
                <div class="string-and-lantern">
                    <div class="curved-string"></div>
                    <div class="lantern">
                        <div class="light"></div>
                        <div class="lantern-text chinese-text">巳巳<br>如意</div>
                        <div class="tassels">
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="anchor-point second">
                <div class="string-and-lantern second">
                    <div class="curved-string"></div>
                    <div class="lantern">
                        <div class="light second"></div>
                        <div class="lantern-text">LINUX<br>DO</div>
                        <div class="tassels">
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- 右边灯笼组 -->
        <div class="lantern-group right">
            <div class="anchor-point right">
                <div class="string-and-lantern right">
                    <div class="curved-string"></div>
                    <div class="lantern">
                        <div class="light"></div>
                        <div class="lantern-text chinese-text">恭贺<br>新春</div>
                        <div class="tassels">
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="anchor-point right second">
                <div class="string-and-lantern right second">
                    <div class="curved-string"></div>
                    <div class="lantern">
                        <div class="light second"></div>
                        <div class="lantern-text">2025</div>
                        <div class="tassels">
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                            <div class="tassel"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- 烟花特效脚本 -->
    <script>
        // 获取Canvas
        const canvas = document.getElementById('fireworks-canvas');
        const ctx = canvas.getContext('2d');

        // 设置Canvas大小
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;

        // 烟花数组
        let fireworks = [];
        let particles = [];

        // 烟花类
        class Firework {
            constructor(x, y, targetY) {
                this.x = x;
                this.y = y;
                this.targetY = targetY;
                this.speed = 5; // 增加速度
                // 设置角度为主要向上,±10度的随机偏移
                const angleRange = Math.PI / 18; // 10度
                this.angle = (Math.PI * 3 / 2) + (Math.random() * angleRange * 2 - angleRange);
                this.color = `hsl(${Math.random() * 360}, 100%, 50%)`;
                this.alive = true;
            }

            update() {
                this.x += Math.cos(this.angle) * this.speed;
                this.y += Math.sin(this.angle) * this.speed;

                if (this.y <= this.targetY) {
                    this.explode();
                    this.alive = false;
                }
            }

            explode() {
                const particleCount = 40; // 增加粒子数量
                for (let i = 0; i < particleCount; i++) {
                    particles.push(new Particle(this.x, this.y, this.color));
                }
            }

            draw() {
                ctx.beginPath();
                ctx.arc(this.x, this.y, 4, 0, Math.PI * 2);
                ctx.fillStyle = this.color;
                ctx.fill();
            }
        }

        // 粒子类
        class Particle {
            constructor(x, y, color) {
                this.x = x;
                this.y = y;
                this.color = color;
                this.speed = Math.random() * 4 + 2; // 增加粒子速度
                this.angle = Math.random() * Math.PI * 2;
                this.gravity = 0.05;
                this.alpha = 1;
                this.fade = Math.random() * 0.02 + 0.01;
            }

            update() {
                this.x += Math.cos(this.angle) * this.speed;
                this.y += Math.sin(this.angle) * this.speed + this.gravity;
                this.alpha -= this.fade;
            }

            draw() {
                ctx.save();
                ctx.globalAlpha = this.alpha;
                ctx.beginPath();
                ctx.arc(this.x, this.y, 3, 0, Math.PI * 2);
                ctx.fillStyle = this.color;
                ctx.fill();
                ctx.restore();
            }
        }

        // 创建烟花
        function createFirework() {
            const x = Math.random() * canvas.width;
            const y = canvas.height;
            const targetY = Math.random() * canvas.height / 2;
            fireworks.push(new Firework(x, y, targetY));
        }

        // 动画循环
        function animate() {
            requestAnimationFrame(animate);
            ctx.fillStyle = 'rgba(26, 26, 26, 0.5)';
            ctx.fillRect(0, 0, canvas.width, canvas.height);

            // 更新和绘制烟花
            fireworks.forEach((firework, index) => {
                if (firework.alive) {
                    firework.update();
                    firework.draw();
                } else {
                    fireworks.splice(index, 1);
                }
            });

            // 更新和绘制粒子
            particles.forEach((particle, index) => {
                if (particle.alpha <= 0) {
                    particles.splice(index, 1);
                } else {
                    particle.update();
                    particle.draw();
                }
            });

            // 随机生成烟花
            if (Math.random() < 0.03) { // 增加烟花出现的频率
                createFirework();
            }
        }

        // 监听窗口大小变化
        window.addEventListener('resize', () => {
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
        });

        // 启动动画
        animate();

        // 倒计时相关脚本
        const currentTimeEl = document.getElementById('currentTime');
        const cnyDateEl = document.getElementById('cnyDate');
        const countdownEl = document.getElementById('countdown');

        const cnyDates = {
            2020: '2020-01-25',
            2021: '2021-02-12',
            2022: '2022-02-01',
            2023: '2023-01-22',
            2024: '2024-02-10',
            2025: '2025-01-29',
            2026: '2026-02-17',
            2027: '2027-02-06',
            2028: '2028-01-26',
            2029: '2029-02-13',
            2030: '2030-02-03'
        };

        function updateTime() {
            const now = new Date();
            const year = now.getFullYear();
            const month = String(now.getMonth() + 1).padStart(2, '0');
            const date = String(now.getDate()).padStart(2, '0');
            const hours = String(now.getHours()).padStart(2, '0');
            const minutes = String(now.getMinutes()).padStart(2, '0');
            const seconds = String(now.getSeconds()).padStart(2, '0');

            currentTimeEl.textContent = `${year}-${month}-${date} ${hours}:${minutes}:${seconds}`;

            let cnyYear = year;
            let cnyDateStr = cnyDates[cnyYear];
            let cnyDate = cnyDateStr ? new Date(cnyDateStr + 'T00:00:00') : null;

            if (cnyDate && now > cnyDate) {
                cnyYear += 1;
                cnyDateStr = cnyDates[cnyYear];
                cnyDate = cnyDateStr ? new Date(cnyDateStr + 'T00:00:00') : null;
            }

            if (cnyDate) {
                cnyDateEl.textContent = `${cnyYear}-${String(cnyDate.getMonth() + 1).padStart(2, '0')}-${String(cnyDate.getDate()).padStart(2, '0')}`;
                const diff = cnyDate - now;

                if (diff <= 0) {
                    countdownEl.textContent = '今天是蛇年!';
                } else {
                    const days = Math.floor(diff / (1000 * 60 * 60 * 24));
                    const hoursLeft = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                    const minutesLeft = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
                    const secondsLeft = Math.floor((diff % (1000 * 60)) / 1000);

                    countdownEl.textContent = `${days}天 ${hoursLeft}小时 ${minutesLeft}分钟 ${secondsLeft}秒`;
                }
            } else {
                cnyDateEl.textContent = '无法计算';
                countdownEl.textContent = '--';
            }
        }

        updateTime();
        setInterval(updateTime, 1000);

    </script>
</body>
</html>
11 个赞

太强了。

1 个赞

多問問會的就越多

1 个赞

哇,好棒

3 个赞

我还以为你能在论坛插html了呢 :dog:

1 个赞

哈哈,没有那么牛

放假回家

强的很∑

强的一逼

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。