vue3+ts 实现转盘抽奖 组件

安装Lucky-canvas抽奖插件   中文官方文档:

https://100px.net/

封装一个Spinner.vue组件

1.安装插件

# npm 安装
npm install @lucky-canvas/vue@latest
# yarn 安装
yarn add @lucky-canvas/vue@latest

 2.找到 main.ts 引入插件并 use


import VueLuckyCanvas from '@lucky-canvas/vue'

createApp(App).use(VueLuckyCanvas).mount('#app')

3.封装组件 

<template>
	<LuckyWheel ref="myLucky" width="300px" height="300px" :prizes="prizes" :blocks="blocks" :buttons="buttons"
		:defaultConfig="defaultConfig" @start="startCallback" @end="endCallback" />
</template>

<script lang="ts" setup>
import { ref } from 'vue';
//转盘容器
const blocks = [{
	padding: '30px',
	//边框图片
	imgs: [{
		src: 'xxx',//图片地址
		width: '110%',
		height: '100%',
		rotate: true
	}]
},
]
//单个内容图片
const prizeImg = {
	src: 'xxx',//图片地址
	width: '30%',
	top: '40%',
	left: '-2%'
}
//奖品数组
const prizes = [
	{ fonts: [{ text: '100能量币', top: '10%', fontSize: '14px', fontColor: '#e74b44' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '1', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '2', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '3', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '4', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '5', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '6', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
	{ fonts: [{ text: '7', top: '10%' }], background: '#ffeaa7', imgs: [prizeImg] },
]
//中心按钮
const buttons = [{
	radius: '25%',
	imgs: [{
		src: 'xxx',//图片地址
		width: '100%',
		top: '-130%'
	}],
	// background: '#fb8c76',
	pointer: true,
	fonts: [{ text: '点击\n抽奖', top: '-15px', left: '3px', fontSize: '16px', fontColor: '#fff' }]
}]
//设置间距
const defaultConfig = {
	gutter: '5px'
}
// 点击抽奖按钮会触发star回调.
const myLucky = ref()
const startCallback = () => {
	// 调用抽奖组件的play方法开始游戏
	myLucky.value.play()
	// 模拟调用接口异步抽奖
	setTimeout(() => {
		// 假设后端返回的中奖索引是0,此处设置随机数
		const index = parseInt(Math.random() * prizes.length + '')
		console.log(index)
		// 调用stop停止旋转并传递中奖索引
		myLucky.value.stop(index)
	}, 3000)
}
// 抽奖结束会触发end回调
const endCallback = (prize: any) => {
	console.log(prize)
}
</script>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值