uniapp实现简单的九宫格抽奖(附源码)

效果展示

uniapp实现大转盘抽奖

实现步骤:

1.该页面可设置8个奖品,每个奖品可设置中奖机会的权重,如下chance越大,中奖概率越高(大于0)

javascript 复制代码
// 示例代码
prizeList: [
	{
		id: 1,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品1",
		chance: 1
	},
	{
		id: 2,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品2",
		chance: 3
	},{
		id: 3,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品3",
		chance: 1
	},
	{
		id: 4,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品4",
		chance: 1
	},
	{
		id: 5,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品5",
		chance: 1
	},
	{
		id: 6,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品6",
		chance: 1
	},
	{
		id: 7,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品7",
		chance: 2
	},
	{
		id: 8,
		image: "https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp",
		name: "奖品8",
		chance: 1
	}
]

2.该页面8个奖品加上一个立即抽奖,一共9个格子,可使用flex-wrap布局排列,转到哪个格子就使用border高光标注

html 复制代码
<!-- 示例代码 -->
<view class="lottery">
	<block v-for="(item, index) in prizeList" :key="index">
		<image class="prize" :class="currentIndex==index?'active':''" src="https://img.alicdn.com/imgextra/i4/1939750137/O1CN01XZivln1CsmzUGGtQF_!!0-saturn_solar.jpg_468x468q75.jpg_.webp" />
		<view v-if="index==3" class="goLottery center_row" :style="btnDisabled?'opacity:0.5;':''" @tap="goLottery">
			<view>立即抽奖</view>
		</view>
	</block>
</view>

3.转动可多次使用不同时间的定时器setIntervalclearInterval结合,不断切换格子active的border位置

javascript 复制代码
// 示例代码
data() {
	return {
		currentIndex: 0,
		runIndexList: [0,1,2,4,7,6,5,3],
		lastRunStepList: [0,1,2,7,3,6,5,4],
		btnDisabled: false,
		prizeList: []
	}
},






let timer = setInterval(() => {
	count--
	currentIndex++
	this.currentIndex = (this.runIndexList[currentIndex % 8])
	if (count < this.prizeList.length * 2) {
		clearInterval(timer)
		let timer2 = setInterval(() => {
			count--
			currentIndex++
			this.currentIndex = (this.runIndexList[currentIndex % 8])
			if (count < this.prizeList.length * 1 - 3) {
				clearInterval(timer2)
				let timer3 = setInterval(() => {
					count--
					currentIndex++
					this.currentIndex = (this.runIndexList[currentIndex % 8])
					if (count <= 0) {
						clearInterval(timer3)
						this.btnDisabled = false
						uni.showToast({
							title: `恭喜您,抽中了${this.prizeList[this.currentIndex].name}`,
							icon: "none"
						})
					}
				}, 400)
			}
	}, 200)
	}
}, 100)

4.根据提前设定好的奖品概率change随机抽取奖品

javascript 复制代码
// 示例代码
// 返回抽奖结果奖品的index
getResultIndex() {
	let totalChance = 0
	for (let i in this.prizeList) {
		totalChance += Number(this.prizeList[i].chance ? this.prizeList[i].chance : 1)
	}
	// 0 ~ 1
	let random = Math.random()
	let index = 0
	let num = 0
	for (let i in this.prizeList) {
		num += (Number(this.prizeList[i].chance) / totalChance)
		if (random < num) {
			index = Number(i)
			break
		}
	}
	return index
}

大功告成!

有任何问题请留言咨询,着急请+企鹅1140559610有源码

相关推荐
光影少年1 天前
AIGC + Taro / 小程序
小程序·aigc·taro
2501_915918411 天前
在 iOS 环境下查看 App 详细信息与文件目录
android·ios·小程序·https·uni-app·iphone·webview
2501_916007471 天前
没有 Mac 用户如何上架 App Store,IPA生成、证书与描述文件管理、跨平台上传
android·macos·ios·小程序·uni-app·iphone·webview
天空属于哈夫克31 天前
Go 语言实战:构建一个企微外部群“技术贴收藏夹”小程序后端
小程序·golang·企业微信
菜鸟una1 天前
【微信小程序+Taro 3+NutUI 3】input (nut-input) 、 textarea (nut-texteare)类型使用避坑
前端·vue.js·微信小程序·小程序·taro
计算机毕设指导61 天前
基于微信小程序的校园二手交易系统【源码文末联系】
java·spring boot·spring·微信小程序·小程序·tomcat·maven
Jiaberrr1 天前
小程序setData性能优化指南:避开坑点,让页面丝滑如飞
前端·javascript·vue.js·性能优化·小程序
Code王1 天前
【课程设计/毕业设计】基于springboot +微信小程序的家政服务平台系统基于小程序的家政服务系统安全开发【附源码、数据库、万字文档】
spring boot·小程序·课程设计
CHU7290351 天前
旧物回收小程序前端功能版块解析:便捷赋能闲置循环
小程序
说私域1 天前
开源AI智能名片链动2+1模式S2B2C商城小程序驱动下的电商裂变增长路径研究
人工智能·小程序·开源·流量运营·私域运营