蓝桥杯,冬奥大抽奖

embedded/2025/3/31 12:01:25/

在日常的网页开发中,抽奖功能是一种常见的交互设计,它可以增加用户的参与感和趣味性。今天,我将分享一个简单的抽奖转盘实现,它使用了HTML、CSS和JavaScript,非常适合初学者学习和理解前端开发的基本概念。

一、项目背景

抽奖转盘是一种常见的互动形式,尤其在活动页面中经常出现。它可以吸引用户参与,增加页面的趣味性和互动性。通过实现一个简单的抽奖转盘,我们可以学习到前端开发中的一些基本技能,例如HTML的结构设计、CSS的样式布局以及JavaScript的事件处理和动画效果实现。

二、HTML结构设计

HTML是网页的骨架,它定义了页面的结构。在这个抽奖转盘项目中,我们使用了以下HTML代码:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /><title>冬奥大抽奖</title><style>/* 样式部分 */</style>
</head>
<body><p id="award"></p><div class="ul"><li class="li1">洗衣机</li><li class="li2">蓝桥抱枕</li><li class="li3">蓝桥公仔</li><li class="li8">冰墩墩</li><li id="start">开始</li><li class="li4">雪融融</li><li class="li7">html5进阶</li><li class="li6">钥匙扣</li><li class="li5">会员15天</li></div><script>// JavaScript部分</script>
</body>
</html>

三、CSS样式设计

CSS负责网页的外观和布局。在这个项目中,我们使用了以下CSS代码来美化抽奖转盘:

/* 1. 转盘容器样式 */
/**
*使用flex布局,使奖品项水平排列,且在页面中心显示。
flex-wrap: wrap允许奖品项换行排列。
position: relative和transform: translate(-50%, 50%)将转盘容器定位到页面的中心位置。
**/
.ul {display: flex;flex-wrap: wrap;justify-content: space-between;width: 400px;height: 380px;position: relative;left: 50%;top: 50%;transform: translate(-50%, 50%);
}/* 2. 奖品项样式 */
/**
*
每个奖品项的宽度和高度均为110px。
margin: 10px为每个奖品项添加外边距,使它们之间有间隔。
list-style: none移除了<li>元素的默认列表样式。
line-height: 100px和text-align: center使奖品名称在奖品项中垂直和水平居中。
border-radius: 10px为奖品项添加圆角效果。
cursor: pointer将鼠标指针变为手形,表示这些奖品项可以被点击(虽然在这个项目中我们主要通过“开始”按钮进行操作)。
背景使用了线性渐变色,从浅蓝色到深蓝色,使转盘看起来更美观。
text-shadow为文字添加阴影效果,增强视觉效果。
color: #ffffff将文字颜色设置为白色,使其在蓝色背景上清晰可见。
**/
li {width: 110px;height: 110px;
}.ul li {box-sizing: border-box;margin: 10px;list-style: none;line-height: 100px;text-align: center;font-size: 20px;border-radius: 10px;cursor: pointer;background: linear-gradient(90deg, #72a8f8 0%, #3e93d3 50%, #5385e2 100%);text-shadow: 5px 5px 5px #1004ad;color: #ffffff;
}
/* 3. “开始”按钮样式 */
#start {background: #1004ad;
}
/* 4. 高亮显示的奖品样式 */
.ul li.active {background: rgb(255, 153, 0);color: #ffffff;
}/* 5. 中奖结果显示样式 */
/**
*
中奖结果显示区域的样式设计使其在页面顶部中央显示。
position: absolute和transform: translateX(-50%)确保它水平居中。
top: 100px将其定位在页面顶部距离100像素的位置。
背景颜色为白色,带有轻微的阴影效果,使其在页面上更加突出。
letter-spacing: 2px增加了文字的间距,使显示更加美观。
line-height: 40px确保文字在显示区域内垂直居中。
**/
#award {position: absolute;left: 50%;transform: translateX(-50%);top: 100px;display: block;width: 320px;height: 40px;background-color: rgb(255, 255, 255);border-radius: 2px;box-shadow: rgba(0, 0, 0, 0.3) 0 0 3px 2px;letter-spacing: 2px;text-align: center;line-height: 40px;
}

四、JavaScript逻辑实现

javascript">let rollTime; // 定义定时器变量用来清除定时器
let time = 0; // 转动次数
let speed = 300; // 转动时间间隔
let times; // 总转动次数// 开始按钮点击事件后开始抽奖
document.querySelector("#start").addEventListener("click", function () {document.querySelector("#award").innerHTML=""; //清空中奖信息times = parseInt(Math.random() * (20 - 30 + 1) + 20, 10); // 定义总转动次数,随机20-30次rolling();
});function setActive(i) {removeActive();let a = document.querySelector(`.li${i}`);a.classList.add("active");
}function removeActive() {let lis = document.querySelectorAll("li");lis.forEach((item, index) => {if (item.classList.contains("active")) {item.classList.remove("active");}});
}
// TODO:请完善此函数
function rolling() {time++; // 转动次数加1]let index = time % 8 == 0 ? 8 : time % 8;setActive(index);let value = document.querySelector(`.li${index}`).textContent;clearTimeout(rollTime);rollTime = setTimeout(() => {window.requestAnimationFrame(rolling); // 进行递归动画}, speed);// time > times 转动停止if (time > times) {clearInterval(rollTime);document.querySelector("#award").innerHTML=value; //清空中奖信息time = 0;return;}
}
  • setActive(i)函数用于设置第i个奖品为高亮状态。

    • 先调用removeActive()移除所有奖品的高亮状态。

    • 然后通过querySelector找到对应的奖品项,并为其添加active类,使其背景颜色变为橙色。

  • removeActive()函数用于移除所有奖品的高亮状态,遍历所有<li>元素,检查它们是否包含active类,如果有则移除。

  • time++:每次调用rolling()函数时,转动次数time加1。

  • index = time % 8 == 0 ? 8 : time % 8:计算当前高亮显示的奖品索引。因为有8个奖品,所以用time对8取余数。如果余数为0,表示转到了最后一个奖品。

  • setActive(index):设置当前索引对应的奖品为高亮状态。

  • value = document.querySelector(.li${index}).textContent:获取当前高亮奖品的文本内容。

  • clearTimeout(rollTime):清除之前的定时器,防止多个定时器同时运行。

  • rollTime = setTimeout(() => { window.requestAnimationFrame(rolling); }, speed):设置一个新的定时器,延迟speed毫秒后再次调用rolling()函数,实现递归动画效果。

  • 如果time > times,表示转盘已经转动了足够的次数,应该停止转动:

    • clearInterval(rollTime):清除定时器。

    • document.querySelector("#award").innerHTML=value:将中奖结果显示在#award元素中。

    • time = 0:重置转动次数。

    • return:退出函数。

五、项目总结

通过这个简单的抽奖转盘项目,我们学习了HTML、CSS和JavaScript的基本用法。HTML用于构建页面结构,CSS用于美化页面,而JavaScript则实现了交互逻辑。这个项目不仅适合前端开发初学者练习,还可以作为小型活动页面的抽奖功能模块。

1. 项目优点

  • 简单易懂:代码结构清晰,逻辑简单,适合初学者学习。

  • 功能完整:实现了基本的抽奖功能,包括转盘转动和结果显示。

  • 可扩展性强:可以通过增加奖品项、调整样式等方式进行扩展。

2. 改进建议

  • 增加动画效果:可以使用CSS动画或JavaScript动画库(如GSAP)为转盘转动添加更平滑的动画效果。

  • 优化随机算法:当前的随机算法较为简单,可以进一步优化以使抽奖结果更加公平。

  • 增加用户交互:可以添加更多交互元素,例如用户输入姓名、分享中奖结果等。

希望这篇文章能帮助你更好地理解前端开发的基本概念,并激发你进一步探索和学习的兴趣。如果你有任何问题或建议,欢迎在评论区留言交流!

 


http://www.ppmy.cn/embedded/176549.html

相关文章

中间件框架漏洞攻略

中间件&#xff08;英语&#xff1a;Middleware&#xff09;是提供系统软件和应⽤软件之间连接的软件&#xff0c;以便于软件各部件之间的沟通。 中间件处在操作系统和更⾼⼀级应⽤程序之间。他充当的功能是&#xff1a;将应⽤程序运⾏环境与操作系统隔离&#xff0c;从⽽实…

Unity Animation的其中一种运用方式

Animation是Unity的旧的动画系统&#xff0c;先说目的&#xff0c;其使用是为了在UI中播放动效&#xff0c;并且在动效播放结束后接自定义事件而设计的 设计的关键点在于&#xff0c;这个脚本不是通过Animation直接播放动画片段&#xff0c;而是通过修改AnimationState的nor…

从零构建大语言模型全栈开发指南:第一部分:数学与理论基础-1.2.2Transformer的突破性设计:自注意力机制与位置编码

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1.2.2 Transformer的突破性设计:自注意力机制与位置编码1. 自注意力机制:全局依赖建模的数学革命1.1 自注意力机制的核心原理1.2 多头注意力:多视角特征融合2. `位置编码:序列顺序的数学表达`2.1 绝…

《Python全栈开发》第12课:RESTful API设计 - 构建现代化接口

🌟 课程目标 理解REST设计原则掌握Flask-RESTful开发实现JWT认证接口构建标准化API文档一、REST是什么?(餐厅点餐系统比喻) 1.1 REST核心原则 #mermaid-svg-0rLbveAhUdJCLKTy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;…

【机器学习】--二分类

开始迷信&#xff1a; """* _oo0oo_* o8888888o* 88" . "88* (| -_- |)* 0\ /0* ___/---\___* …

回归任务训练--MNIST全连接神经网络(Mnist_NN)

import torch import numpy as np import logging from torch.utils.data import TensorDataset, DataLoader from torch.utils.data import DataLoader# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 定义 loss_batch…

《基于深度学习的指纹识别智能门禁系统》开题报告

个人主页&#xff1a;大数据蟒行探索者 1研究背景 1.1开发目的和意义 指纹识别作为生物特征识别领域的一项重要技术&#xff0c;在安全认证、犯罪侦查和个人身份验证等方面具有广泛应用前景。随着深度学习技术的迅猛发展&#xff0c;基于深度学习的指纹识别系统成为了当前研究…

开发语言漫谈-groovy

groovy是一门脚本语言&#xff0c;在前期的脚本语言中简单介绍了下。现在再深入介绍下&#xff0c;因为它是本平台上选用的脚本语言。所谓脚本语言就是不用编译&#xff0c;直接执行。这种特色非常适合做嵌入编程&#xff0c;即编即用。我们知道平台后台的业务开发语言是Java&a…