「红小包抽奖」是一款模拟微信红包的数字抽奖小程序,无需花钱,可绑定多个微信群,可切换排序:手气最佳、手气最差、手速最快。
说一下应用场景。
如果你有加入一些商家群,那应该经常会看到商家在群里发红包,然后说手气最佳送一个啥啥啥,也有商家会挑手气最差的。
这里有几个小问题。
- 如果要找手气最差的,不太好找,尤其人多的时候。
- 如果要找手气最佳前几名,或者手气最差后几名,也都不太好找,因为不可以切换排序。
- 如果我想一个红包让多个群的人一起来抢,好像也还没办法实现。
「红小包抽奖」解决了以上问题,可以切换排序方式,可以绑定多个群。
当然也可以不绑定群,比如你是写公众号的,那就不用绑定群,公开,所有人都可以来抢。
还有一点很重要,就是不需要真的往红包里塞钱。这其实就是一个模拟微信红包的数字游戏。因为很多人玩微信红包抽奖,关键点还是在“抽奖”,而不是“红包”,金额也不会太大。不过在这款小程序里,没人可以拦住你的任性,发一个亿太简单。
以下是小程序的功能介绍视频。
特别感谢 Neo 老师给了我灵感,才有了这款小程序。Neo 是我的用户,给了我很多建议和帮助。之前做的一个“翻牌抽奖”的小程序,他使用时遇到一个 bug,我们聊的时候,Neo 说,其实直接用微信红包在群里抽奖,感觉效果也还不错。他这句听似不经意的话,刹那间给了我灵感,几天之后就开始付诸行动,花了三周时间,有了现在这款「红小包抽奖」,再次感谢 Neo!
这款小程序已经发布,不过版本是 1.0.0。后面改了几个 bug,作了一些优化,但是没有通过审核,原因是红包类目下架了,可能在作规则修改,也不知道哪天会再次开放。如果不再开放红包类目,那这个 v1.0.0 估计是绝版了。
祝你玩得开心!
有同学好奇红包金额的随机算法,这里分享一下:
const fixFloatNumber = (num = 0) => {
const decimal = String(num).split('.')[1]
let newNum = num
if (decimal && decimal.length > 2) {
newNum = parseFloat(parseFloat(num).toFixed(2))
}
return newNum
}
const randomMoney = (infoData) => {
const { usableMoney = 0, stock = 0, soldNum = 0 } = infoData
const usableStock = stock - soldNum
const averageMoney = usableMoney / usableStock
const stockRatio = soldNum / stock
let coeff = 1 + stockRatio
// 前面和后面的红包,随机数的最大值会比中间部分的红包要小一些,避免前面的红包金额大概率偏大(尤其是第一个),也避免后面的红包金额大概率偏小(尤其是最后一个)。
if (stockRatio < 0.1 || stockRatio > 0.9) {
coeff = 1.3
} else if (stockRatio < 0.2 || stockRatio > 0.8) {
coeff = 1.4
} else if (stockRatio < 0.3 || stockRatio > 0.7) {
coeff = 1.5
} else {
coeff = 1.6
}
const minMoney = averageMoney / 2
const maxMoney = averageMoney * coeff
let luckyMoney
if (usableStock === 1) {
luckyMoney = usableMoney
} else {
luckyMoney = Math.round(((Math.random() * (maxMoney - minMoney)) + minMoney) * 100) / 100
}
return fixFloatNumber(luckyMoney)
}