【抽奖平台开发(1)】抽奖功能的前端实现(HTML+JS+CSS)


从本章开始,将用四章的篇幅,记录一次从前台的用户前端抽奖抽奖结果的表单提交数据库存储抽奖结果到后台的管理员管理抽奖结果这样一个抽奖平台开发的全过程,梳理前后端之间数据交互所需步骤及实现方法,明晰前台后台开发差异。

值得注意的是,前端后端是从用户可视化角度而言的,与用户直接交互的部分属于前端,反之属于后端;与前后端概念不同的是前台和后台,前台指的是面向用户的平台,后台指的是面向运营人员的用于管理数据的平台,前台和后台一般而言都包含一套完整的前后端,在此予以明晰,以便后续的阅读理解。

在这里插入图片描述


一、抽奖界面的搭建(HTML + CSS)

这里我搭建了一个九宫格抽奖界面:
在这里插入图片描述

1. HTML部分:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>抽奖</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>

<body >
	<div class="game" >
		<div class="turntable"style="position: absolute;left: 50%;transform:translateX(-50%)"  >
			<div class="gift">1号礼物</div>
			<div class="gift">随机金额红包</div>
			<div class="gift">8号礼物</div>
			<div class="gift">2号礼物</div>
			<div class="gift"></div>
			<div class="gift">6号礼物</div>
			<div class="gift">3号礼物</div>
			<div class="gift">4号礼物</div>
			<div class="gift">5号礼物</div>
			<button type="button" class="start" onclick="start()">我要礼物</button>
		</div>
	</div>
</body>
</html>
2. CSS部分:
<style>
	.game{
		width: 100%;
		height: 320px;
		text-align: center;
		margin-top: 0 auto; 
	}
	.turntable{
		width: 310px;
		height: 320px;
		margin-top: 0 auto;
	}
	.gift{
	    width: 100px;
	    height: 100px;
	    border: 1px solid yellowgreen;
	    float: left;
	    font-size: 14px;
	    font-weight: bold;
	    text-align: center;
	    line-height: 100px;
        background-color: azure;
    	color: cadetblue;
	}
	.gift:nth-child(5){
		background-color: transparent;
	}
	.start{
		width: 80%;
	    display: inline-block;
	    margin-top: 15px;
	    margin-bottom: 10px;
	    vertical-align: middle;
	    color: rgb(255, 255, 255);
	    background-color: rgb(233, 104, 107);
	    text-align: center;
	    cursor: pointer;
	    white-space: nowrap;
	    box-shadow: rgba(0, 0, 0, 0.12) 0px 2px 6px, rgba(0, 0, 0, 0.24) 0px 1px 2px;
	    font-family: 微软雅黑;
	    border-width: initial;
	    border-style: none;
	    border-color: initial;
	    border-image: initial;
	    outline: 0px;
	    padding: 8px 18px;
	    overflow: hidden;
	    text-decoration: none;
	    transition: all 0.2s ease-out 0s;
	    border-radius: 2px;
	}
	.selected{
		border:1px solid transparent;
		box-shadow: 0 0 5px 2px red;
		position:relative;
		background-color: antiquewhite;
	}
</style>

二、抽奖功能的实现(JavaScript + jQuery)

前端实现抽奖功能的设计思路:

  1. 在HTML中点击抽奖按钮,调用start()函数,触发抽奖功能。

  2. 使用position变量给每一个抽奖格标号同时确定抽奖特效滚动顺序。

  3. 抽奖列表及概率(ArrList)确定后需要结果的(真/伪)随机性,因此定义一个getArrayItems函数用于随机取数。

  4. 奖品列表有“随机金额红包”选项,gift:eq('+ position[(x%8)])定位红包选项,执行其对应函数。

  5. 在确定 “随机金额红包”可选金额(money)后,定义randmoney函数随机抓取红包金额。

在这里插入图片描述

<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>  

<script>
	var gift;
	var x=0;
	//可修改ArrList以定义每一奖项中奖概率;
	var ArrList=[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]; 
	//position用于定位每一个抽奖格;
	var position=[0,1,2,5,8,7,6,3];
	var money=[1.88,5.20,6.66,8.88,13.14,66.66,88.88,99.99,100];

	function start(){
		var initial=getArrayItems(ArrList,1);
		for (var i = 0; i < initial; i++) {
			setTimeout(()=>{
				$('.gift').removeClass("selected");
				gift=$('.gift:eq('+ position[(x%8)] +')');
				gift.addClass('selected');
				x++;
				if (x==initial) {setTimeout(()=>{
					if (position[(x%8)]==2) {
						randmoney();
					}else{
						alert('恭喜获得礼物:'+gift.text());
					}
					console.log(position[(x%8)]);
					x=0;
				},10)}
			},i*150);
		}
	}

	function randmoney(){
		for (var i = 0; i < 15; i++) {
			setTimeout(()=>{
				$('.gift:eq(1)').text(getArrayItems(money,1));
				x++;
				if (x==15) {x=0;setTimeout(()=>{
                    console.log($('.gift:eq(1)').text()+"元");
					alert('恭喜获得红包:'+$('.gift:eq(1)').text()+"元");
					$('.gift:eq(1)').text('随机金额红包');
				},1)}
			},i*100);

		};
	}

	function getArrayItems(arr, num) {
	    //新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组;
	    var temp_array = new Array();
	    for (var index in arr) {
	        temp_array.push(arr[index]);
	    }
	    //取出的数值项,保存在此数组
	    var return_array = new Array();
	    for (var i = 0; i<num; i++) {
	        //判断如果数组还有可以取出的元素,以防下标越界
	        if (temp_array.length>0) {
	            //在数组中产生一个随机索引
	            var arrIndex = Math.floor(Math.random()*temp_array.length);
	            //将此随机索引的对应的数组元素值复制出来
	            return_array[i] = temp_array[arrIndex];
	            //然后删掉此索引的数组元素,这时候temp_array变为新的数组
	            temp_array.splice(arrIndex, 1);
	        } else {
	            //数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项.
	            break;
	        }
	    }
	    return return_array;
	}
</script>

在这里插入图片描述


自此我们完成了抽奖平台开发中抽奖功能的前端实现。下一步需要解决的问题是如何将抽奖结果通过表单的方式提交至后端。

在这里需要强调的是,关于抽奖结果直接由前端生成显然存在一定的安全隐患,一般而言中奖逻辑以及库存计算等问题应该全部由后端负责,前端仅仅负责动画的实现(如通过ajax请求返回最终位置或者已提前确定最终位置),这一章的写作仅仅是为了解答粉丝关于前端如何快速实现抽奖功能的疑问,适合运用于现场抽奖情境,如有安全需求,可以按照我上面的思路进行改进,特此说明。


后期内容提要:


如果您有任何疑问或者好的建议,期待你的留言与评论!

  • 27
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
抽奖页面的实现需要前端技术,包括HTMLCSS和JavaScript。下面是一个简单的抽奖页面示例,代码如下: HTML代码: ```html <!DOCTYPE html> <html> <head> <title>抽奖页面</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="container"> <h1>抽奖页面</h1> <div class="lottery"> <div class="lottery-box"> <div class="lottery-cards"> <div class="card"> <img src="images/card1.png"> </div> <div class="card"> <img src="images/card2.png"> </div> <div class="card"> <img src="images/card3.png"> </div> <div class="card"> <img src="images/card4.png"> </div> <div class="card"> <img src="images/card5.png"> </div> </div> <button class="btn" id="btn-start">开始抽奖</button> </div> </div> </div> <script type="text/javascript" src="script.js"></script> </body> </html> ``` CSS代码: ```css .container { max-width: 960px; margin: 0 auto; padding: 20px; } .lottery { margin-top: 50px; text-align: center; } .lottery-box { position: relative; display: inline-block; } .lottery-cards { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; align-items: center; justify-content: center; flex-wrap: wrap; } .card { width: 100px; height: 100px; margin: 10px; background-color: #fff; border: 1px solid #ddd; border-radius: 5px; display: flex; align-items: center; justify-content: center; } .card img { max-width: 100%; max-height: 100%; } .btn { display: block; margin: 50px auto; padding: 10px 20px; background-color: #f00; color: #fff; border: none; border-radius: 5px; font-size: 24px; cursor: pointer; } .btn:hover { background-color: #f66; } ``` JavaScript代码: ```javascript var btnStart = document.getElementById('btn-start'); var lotteryCards = document.querySelectorAll('.card'); btnStart.addEventListener('click', function() { // 随机选择一个卡片 var index = Math.floor(Math.random() * lotteryCards.length); // 添加选中样式 lotteryCards[index].classList.add('selected'); }); ``` 以上代码实现了一个简单的抽奖页面,其中包含了五张卡片,点击“开始抽奖”按钮后,页面随机选中一张卡片,并添加选中样式。你可以根据自己的需求修改代码,实现更为复杂的抽奖页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓大帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值