介绍:
前端九宫格是一种常见的抽奖方式,js实现如下,掌握其原理,不论多少宫格,都可以轻松应对。(代码可复制直接运行看效果)。
该案例以四宫格入门,可扩展多宫格,奖品模块的布局可自由设置。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>四宫格抽奖</title> </head> <style> html,body{ 100%; height: 100%; max- 750px; margin: auto; } .outBox{ 100%; height: 60%; background: gray; position: relative; display: flex; flex-flow: row wrap; } .prize{ 44%; height: 40%; margin: 5% 3%; text-align: center; font-size: xx-large; color: #fff; padding-top: 15%; box-sizing: border-box; border: 6px double #AB945E; } .prize.active{ background: goldenrod; } .btn{ position: absolute; left:30%; bottom:-20%; 40%; text-align: center; height: 12%; font-size: xx-large; } </style> <body> <div class="outBox" id="lotteryBoxs"> <div class="prize prize-0 one">一等奖</div> <div class="prize prize-1 two">二等奖</div> <div class="prize prize-3 four">谢谢参与</div> <div class="prize prize-2 three">三等奖</div> <button class="btn">开启好运</button> </div> </body> <script src="http://code.jquery.com/jquery-2.2.4.min.js"></script> <script> $(document).ready(function() { // 转盘的初定义 var lottery = { index: 0, //当前转动到哪个位置,起点位置 count: 0, //总共有多少个位置 timer: 0, //setTimeout的ID,用clearTimeout清除 speed: 10, //初始转动速度 times: 0, //转动次数 cycle: 30, //转动基本次数:即至少需要转动多少次再进入抽奖环节 prize: 0, //中奖位置 init: function(id) { if ($("#" + id).find(".prize").length > 0) { $lottery = $("#" + id); $units = $lottery.find(".prize"); this.obj = $lottery; this.count = $units.length; } }, roll: function() { var index = this.index; var count = this.count; var lottery = this.obj; $(lottery).find(".prize").removeClass("active"); index += 1; if (index > count - 1) { index = 0; } $(lottery).find(".prize-" + this.index).addClass("active"); this.index = index; return false; }, stop: function(index) { this.prize = index; return false; } }; // 中奖转动事件 function roll() { lottery.times += 1; lottery.roll(); var prize_site = $("#lotteryBoxs").attr("prize_site"); if (lottery.times > lottery.cycle + 10 && lottery.index == prize_site) { var prize_id = $("#lotteryBoxs").attr("prize_id"); var prize_name = $("#lotteryBoxs").attr("prize_name"); console.log(prize_site+"结果") //中奖情况的判断--模态框 if(prize_site == 1 || prize_site == 2 || prize_site == 3){ //已中奖 setTimeout(function(){ console.log("恭喜你获得" + prize_name) },500) }else{ //未中奖 setTimeout(function(){ console.log("中奖结果:" + prize_name) },500) } clearTimeout(lottery.timer); lottery.prize = -1; lottery.times = 0; click = false; } else { if (lottery.times < lottery.cycle) { lottery.speed -= 20; } else if (lottery.times == lottery.cycle) { var index = Math.random() * (lottery.count) | 0; lottery.prize = index; } else { if (lottery.times > lottery.cycle + 10 && ((lottery.prize == 0 && lottery.index == lottery.count - 1) || lottery.prize == lottery.index + 1)) { lottery.speed += 90; } else { lottery.speed += 30; } } if (lottery.speed < 30) { lottery.speed = 30; } lottery.timer = setTimeout(roll, lottery.speed); } return false; } var click = false; // 后台数据的调用 $(function() { lottery.init('lotteryBoxs'); $(".btn").click(function() { if (click) { return false; } else { lottery.speed = 100; //此处数据应该从接口获取 var prizeArr=["谢谢参与","一等奖","二等奖","三等奖"] var prizeId = Math.floor(Math.random()*(3-0+1)+0); var prize_site = prizeId; console.log("位置"+prizeId); $("#lotteryBoxs").attr("prize_site", prize_site ); $("#lotteryBoxs").attr("prize_name", prizeArr[prizeId]); roll(); click = true; return false; } }); }) }); </script> </html>
页面效果如下: