【经典】高级动态抽奖系统(HTML,CSS、JS)

目录

界面展示

1、添加参与者

2、进行动态抽奖

3、清空

使用方法:

完整代码:


以下是一个动态的抽奖系统示例,允许用户动态添加参与者,并可以随机抽取中奖者。参与者列表动态更新,使用简单直观的交互界面

实时动画:在抽奖过程中增加滚动效果,模仿转盘随机抽取的体验。

清除功能:允许用户清空参与者列表或移除特定参与者。

多轮抽奖:支持多次抽奖,并记录每轮的中奖结果。

界面展示

1、添加参与者
2、进行动态抽奖
3、清空
  1. 滚动动画

    • 点击"开始抽奖"后会滚动显示随机选中的名字,增加互动性。
  2. 清空列表

    • 提供"清空"按钮,允许用户清空当前的参与者列表。
  3. 结果区域优化

    • 抽奖结果显示更加动态,未中奖时显示"等待抽奖结果..."。
  4. 限制滚动时间

    • 滚动动画持续 3 秒后自动停止并宣布结果。

使用方法:

  1. 将代码保存为 .html 文件并在浏览器中打开。
  2. 动态添加参与者。
  3. 点击"开始抽奖",体验滚动效果和随机抽奖功能。

完整代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高级动态抽奖系统</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f4f8;
            margin: 0;
            padding: 0;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }
        .container {
            background-color: white;
            border-radius: 10px;
            padding: 20px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
            text-align: center;
            width: 400px;
        }
        h1 {
            font-size: 24px;
            color: #333;
            margin-bottom: 20px;
        }
        .input-area, .controls {
            margin-bottom: 20px;
        }
        input, button {
            padding: 10px;
            border: none;
            border-radius: 5px;
            font-size: 16px;
        }
        button {
            background-color: #007BFF;
            color: white;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .participants {
            text-align: left;
            margin-top: 20px;
        }
        .participants ul {
            list-style: none;
            padding: 0;
            max-height: 200px;
            overflow-y: auto;
            border: 1px solid #ddd;
            border-radius: 5px;
            padding: 10px;
        }
        .participants li {
            margin: 5px 0;
            padding: 5px;
            background-color: #f7f7f7;
            border-radius: 3px;
        }
        .result {
            font-size: 18px;
            color: #28a745;
            margin-top: 20px;
            height: 40px;
            line-height: 40px;
        }
        .result span {
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>高级动态抽奖系统</h1>
        <div class="input-area">
            <input type="text" id="participant" placeholder="输入参与者名字">
            <button onclick="addParticipant()">添加</button>
            <button onclick="clearParticipants()" style="background-color: #dc3545; margin-left: 10px;">清空</button>
        </div>
        <div class="controls">
            <button onclick="startLottery()">开始抽奖</button>
        </div>
        <div class="result" id="result">等待抽奖结果...</div>
        <div class="participants">
            <strong>参与者列表:</strong>
            <ul id="participantsList"></ul>
        </div>
    </div>

    <script>
        const participants = []; // 存储参与者列表
        let rollingInterval;

        // 添加参与者
        function addParticipant() {
            const input = document.getElementById('participant');
            const name = input.value.trim();
            if (name) {
                participants.push(name);
                updateParticipantsList();
                input.value = '';
            } else {
                alert('请输入有效的名字!');
            }
        }

        // 清空参与者
        function clearParticipants() {
            participants.length = 0;
            updateParticipantsList();
            document.getElementById('result').textContent = "等待抽奖结果...";
        }

        // 更新参与者列表
        function updateParticipantsList() {
            const list = document.getElementById('participantsList');
            list.innerHTML = '';
            participants.forEach((name, index) => {
                const li = document.createElement('li');
                li.textContent = `${index + 1}. ${name}`;
                list.appendChild(li);
            });
        }

        // 开始抽奖
        function startLottery() {
            const result = document.getElementById('result');
            if (participants.length === 0) {
                alert('请先添加参与者!');
                return;
            }

            // 动态滚动效果
            let currentIndex = 0;
            result.textContent = '抽奖中...';
            rollingInterval = setInterval(() => {
                result.textContent = `当前选中: ${participants[currentIndex]}`;
                currentIndex = (currentIndex + 1) % participants.length;
            }, 100);

            // 停止滚动并选出赢家
            setTimeout(() => {
                clearInterval(rollingInterval);
                const winnerIndex = Math.floor(Math.random() * participants.length);
                result.innerHTML = `恭喜 <span>${participants[winnerIndex]}</span> 中奖!`;
            }, 3000); // 3秒后停止
        }
    </script>
</body>
</html>

此版本页面更加动态,用户体验更好,并增加了互动性和操作性。


嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。

点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。

相关推荐
彪8251 小时前
第十章 JavaScript的应用
css·html5
莘薪1 小时前
JQuery -- 第九课
前端·javascript·jquery
好青崧1 小时前
CSS 样式入门:属性全知晓
前端·css·tensorflow
光头程序员1 小时前
工程化开发谷歌插件到底有爽
前端·react·工程化·前端工程化·谷歌插件
蒜蓉大猩猩1 小时前
Vue.js --- Vue3中其他组合式API
前端·javascript·vue.js·前端框架·node.js·html
铅华尽2 小时前
前端---HTML(一)
前端
无限大.2 小时前
0基础学前端系列 -- 深入理解 HTML 布局
前端·html
珹洺2 小时前
从 HTML 到 CSS:开启网页样式之旅(开篇之一)——CSS 初体验与网页样式新征程
前端·javascript·css·前端框架·html
wh柒八九2 小时前
wkhtmltopdf的安装与使用
pdf·html
前端Hardy2 小时前
HTML&CSS:翻书加载效果
前端·javascript·css·3d·html·css3