uniapp写抽奖转盘

1.今天写一个抽奖转盘样式如下,抽奖结果由后端控制

在这里插入图片描述
2.代码如下,

<view class="choujiang">
	<view class="wheel-wrapper">
		<view class="wheel-pointer" :class="{freeze: btnImg}" @click="onClickRotate">
			<image :src="btnImg" style="width: 150upx;" mode='widthFix'></image>
		</view>
		<view class="wheel-bg" :class="{freeze: bgImg}"
			:style="{ transform: 'rotate('+wheelDeg+'deg)',background:'url('+bgImg+')'}">
			<view class="prize-list">
				<view class="prize-item-wrapper" v-for="(item,index) in prizeList" :key="index">
					<view class="prize-item"
						:style="{ transform: 'rotate('+(360/ prizeList.length) * index+'deg)'}">
						<view class="prize-name">
							{{ item.award_name }}
						</view>
						<view class="prize-icon">
							<text class="iconfont iconhb">&#xe61d;</text>
						</view>
					</view>
				</view>
			</view>
		</view>
	</view>
</view>

样式如下:定位什么的可以自己调试

.choujiang{
	width:100%;
	height: 600rpx;
}

.wheel-wrapper {
	width: 600upx;
	height: 600upx;
	position: absolute;
	top: 60%;
	left: 50%;
	transform: translate(-50%, -50%);
}

.wheel-pointer {
	width: 150upx;
	height: 192upx;
	border-radius: 1000px;
	background: yellow;
	position: absolute;
	left: 50%;
	top: 61%;
	margin-top: -88upx;
	transform: translate(-50%, -50%);
	text-align: center;
	line-height: 120upx;
	z-index: 10;
}

.wheel-bg {
	width: 100%;
	height: 100%;
	border-radius: 1000px;
	overflow: hidden;
	transition: transform 4s ease-in-out;
	background: #dcdcdc;
}

.freeze {
	border-radius: 0;
	background: none;
	background-size: 100% !important;
}

.prize-list {
	width: 100%;
	height: 100%;
	position: relative;
	text-align: center;
}

.prize-item-wrapper {
	position: absolute;
	top: 0;
	left: 50%;
	transform: translateX(-50%);
	width: 300upx;
	height: 300upx;
}

.prize-item {
	width: 100%;
	height: 100%;
	transform-origin: bottom;
}

.prize-name {
	padding: 86upx 0 10upx;
	color: #E73636;
	font-size: 32rpx;
	font-weight: bold;
}

.prize-icon .iconhb {
	font-size: 50rpx;
	color: #FA4A4A;
}

3.在data里面进行申明

data() {
	return {
		prizeList: [], //奖品分类
		bgImg: '../../static/img/pan.png', //  转盘背景
		btnImg: '../../static/img/zhen2.png', //  转盘指针图片
		lucky: '', //  中奖ID
		prizeNumber: 8, //  转盘显示奖品个数
		rolling: false, //控制转盘转动
		wheelDeg: 0, //转的角度
	}
},

4.写事件

onClickRotate() {
	let that = this;
	//参数
	let data = {
		type: that.type,
		id: that.detail.id,
	}
	//接口,参考我写的接口封装,也可以用自己的办法,主要的是接口请求成功后的操作
	that.apifun.unirequest(that.apifun.turntable_luckdraw, 'post', data, (res) => {
		if (res.code === 1) {
			let data = res.data;
			//后端返回的中奖id
			that.lucky = data.award;
			let luckyindex = '';
			let text = '恭喜得到' + data.award_title + data.memo;
			//为了转盘停到指控区域,通过返回的中奖id,在奖品列表里面查找对应的奖项的索引
			that.prizeList.forEach((item, index) => {
				if (that.lucky == item.id) {
					luckyindex = index * 1;
				}
			})
			that.rolling = true; //中奖成功,控制转盘转动
			const {
				wheelDeg,
				prizeList
			} = this;
			//数字8是转盘的块数也是奖项的数量,luckyindex中的奖项的索引
			this.wheelDeg =
				wheelDeg -
				wheelDeg % 360 +
				8 * 360 +
				(360 - 360 / prizeList.length * luckyindex);
			//中奖返回中奖信息,this.apifun.toast(text);是封装的提示,可以用uniapp的提示方法代替
			setTimeout(() => {
				this.rolling = false;
				this.apifun.toast(text);
			}, 4500);
		} else {
			that.apifun.toast(res.msg)
		}
	})
},
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值