js年会抽奖_公司年会用了我写的抽奖程序,然后我中奖了……

f3110107d90f03d891d8efa00e808ca0.png

作者丨大道至简1024

来源丨1024驿站(ID:trans1024)

背景

临近年末,又到了各大公司举办年会的时候了。对于年会,大家最关心的应该就是抽奖了吧?虽然中奖概率通常不高,但总归是个机会,期待一下也是好的。

最近,我们部门举办了年会,也有抽奖环节。临近年会的前几天,Boss 突然找到我,说要做一个抽奖程序,部门年会要用。我当时都懵了:就三天时间,万一做的程序有bug,岂不是要被现场百十号人的唾沫给淹死?没办法,Boss 看起来对我很有信心,我也只能硬着头皮上了。

需求

  1. 要一个设置页面,包括设置奖项、参与人员名单等。

  2. 如果单个奖项中奖人数过多,可分批抽取,每批人数可设置。

  3. 默认按奖项顺序抽奖,也可选定某个奖项开始。

  4. 可删除没到场的中奖者,同时可再次抽取以作替补。

  5. 可在任意奖项之间切换,可查中奖记录名单

  6. 支持撤销当前轮次的抽奖结果,重新抽取。

实现

身为 Web 前端开发,自然想到用 Web 技术来实现。本着不重复造轮子的原则,首先求助 Google,Github。搜了一圈好像没有找到特别好用的程序能直接用的。后来看到一个 Github 上的一个项目,用 TagCanvas 做的抽奖程序,界面挺好,就是逻辑有问题,点几次就崩溃了。代码是不能拿来用了,标签云这种抽奖形式倒是可以借鉴。于是找来文档看了下基本用法,很快就集成到页面里了。

由于设置页面涉及多种交互,纯手写太费时间了,直接用框架。平时 Element UI 用得比较多,自然就用它了。考虑到年会现场可能没有网络,就把框架相关的JS和CSS都下载到本地,直接引用。为了快速开发,也没搭建 webpack 构建工具了,直接在浏览器里引入JS。

    "stylesheet" href="css/reset.css" />
rel="stylesheet"
href="js/element-ui@2.4.11/lib/theme-chalk/index.css"
/>



1设计数据结构

奖项列表 awards

[{
"name": "二等奖",
"count": 25,
"award": "办公室一日游"
}, {
"name": "一等奖",
"count": 10,
"award": "BMW X5"
}, {
"name": "特等奖",
"count": 1,
"award": "深圳湾一号"
}]

参与人列表 members

[{
"id": 1,
"name": "张三"
}, {
"id": 2,
"name": "李四"
}]

待抽奖人员列表players,是members 的子集:

[{
"id": 1,
"name": "张三"
}]

抽奖结果列表result,按奖项顺序索引:

[[{
"id": 1,
"name": "张三"
}], [{
"id": 2,
"name": "李四"
}]]

2参数配置页面

包括奖项设置和参与人员列表。

12690eb0aa86a2a89b5526b7b76fa60b.png

3抽奖页面

ca32933b088177d014edfe3e0bb86e92.png

具体代码可以去我的 Github 项目

https://github.com/kaysonli/lucky-ball 

查看,方便的话可以点个 star。

也可以先体验一下(在 PC 上打开):

http://luckyball.surge.sh/index.html

由于时间仓促,代码写得比较将就。

年会当天抽中了四等奖:1000元购物卡。我是不是该庆幸自己没中特等奖……

祝大家好运!

cb393802f13709ee43efeb9c6d1353fa.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽奖程序的基本思路如下: 1. 定义一个数组,里面存储所有参加抽奖的人的姓名。 2. 点击“开始抽奖”按钮后,随机生成一个数组下标,即获奖者的索引。 3. 将获奖者的姓名显示在页面上。 下面是一个简单的示例代码: HTML: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>年会抽奖</title> </head> <body> <h1>年会抽奖</h1> <p>参加抽奖的人员名单:</p> <ul id="name-list"> <li>小明</li> <li>张三</li> <li>李四</li> <li>王五</li> <li>赵六</li> </ul> <button id="start-btn">开始抽奖</button> <p id="result"></p> <script src="app.js"></script> </body> </html> ``` JS: ``` // 获取参加抽奖的人员名单 var names = document.querySelectorAll('#name-list li'); // 定义一个函数,用于生成随机数 function getRandomIndex(max) { return Math.floor(Math.random() * Math.floor(max)); } // 获取开始抽奖按钮和结果显示区域 var startBtn = document.querySelector('#start-btn'); var result = document.querySelector('#result'); // 点击开始抽奖按钮后,随机生成一个获奖者的索引,并将其姓名显示在页面上 startBtn.addEventListener('click', function() { // 生成随机数 var randomIndex = getRandomIndex(names.length); // 获取获奖者的姓名 var winnerName = names[randomIndex].textContent; // 将获奖者的姓名显示在页面上 result.textContent = '恭喜' + winnerName + '获得大奖!'; }); ``` 在这个示例中,我们使用了 `querySelectorAll` 方法获取了所有参加抽奖的人员名单,并将其存储在 `names` 变量中。然后,我们定义了一个 `getRandomIndex` 函数,用于生成随机数。该函数接受一个参数 `max`,表示随机数的最大值。我们使用 `Math.random()` 方法生成一个介于 0 和 1 之间的随机数,然后将其乘以 `max` 并取整,得到一个介于 0 和 `max-1` 之间的随机整数。接着,我们使用 `querySelector` 方法获取了开始抽奖按钮和结果显示区域,并为开始抽奖按钮添加了一个 `click` 事件监听器。当用户点击开始抽奖按钮时,我们调用 `getRandomIndex` 函数生成一个随机数,然后使用该随机数获取获奖者的姓名,并将其显示在结果显示区域中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值