微信小程序-转盘抽奖

微信小程序-转盘抽奖代码:

lucky-draw.wxss:

.lucky_draw_zp{ width: 502rpx; height: 502rpx; margin: 0 auto; position: relative;}
.lucky_draw_zp_img , .lucky_draw_zp_btn{ width: 100%; height: 100%; position: absolute; left: 0; top: 0;}

lucky-draw.wxml:

<view class="lucky_draw_zp" bindtap="getLucky">
	<image style="{{zpRotateDeg}}" class="lucky_draw_zp_img" src="{{zpData.zpImg}}" mode="aspectFit"></image>
	<image class="lucky_draw_zp_btn" src="../../../images/zp_btn.png" mode="aspectFit"></image>
</view>

lucky-draw.js:

 
Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		zpData:{
			//转盘主图图片url
			zpImg:'../../../images/zp.png',
			
			equalParts:null, //一共多少等份
			oneAngle:null, //每一等份多少度
			
			// ******** 转盘奖品数据:后台获取数据 ********
			//注:根据转盘图片对应的值(转盘图片指针处顺时针向右数,起始1,奖品对应的格子数【第几等份上】)
			awardSetting:[
				'第1个格子对应内容',
				'第2个格子对应内容',
				'第3个格子对应内容',
				'第4个格子对应内容',
				'第5个格子对应内容',
				'第6个格子对应内容',
			],
		},
		
		ifRoate:false, //转盘是否在转动(判断阻止多次点击)
		zpRotateDeg:'', //旋转角度
		
		// ******** 抽奖结果数据:后台获取数据 ********
		curKey:null, //抽奖结果 : 取值范围 1 至 总格子数
		ifWinning:null, //是否中奖
	},




	// 获取转盘初始数据
	getZpData(){
		let zpImg = 'zpData.zpImg';
		let awardSetting = 'zpData.awardSetting';
		this.setData({
			[zpImg]:'../../../images/zp.png',
			[awardSetting]:[
				'1',
				'2',
				'3',
				'4',
				'5',
				'6',
			],
		});
		
		this.setZpDefault();
	},
	// 根据转盘初始数据设置转盘初始关键参数
	setZpDefault(){
		let equalPartsNum = this.data.zpData.awardSetting.length;
		let oneAngleNum = 360 / equalPartsNum;
		let equalParts = 'zpData.equalParts';
		let oneAngle = 'zpData.oneAngle';
		this.setData({
			//一共多少等份
			[equalParts] : equalPartsNum,
			// 根据转盘得等份数设置 每一等份多少度
			[oneAngle] : oneAngleNum,
		});
	},


	// 设置旋转动效
	setToRotate(degNum){
		this.setData({
			zpRotateDeg : '-webkit-transform: rotate(' + degNum + 'deg);transform: rotate(' + degNum + 'deg);-webkit-transition: all 5s ease;transition: all 5s ease;',
		});
	},
	//根据 设置的 指针停止时指向的格子(中奖结果),设置其旋转角度区间
	setRotate(awardSettingNumber){ //awardSettingNumber  取值范围 1 至 总格子数
		setTimeout(() => {
			//转盘停止时 指针 指向的格子 最小角度
			let minAngle = 360 - awardSettingNumber * this.data.zpData.oneAngle + 5;
			//转盘停止时 指针 指向的格子 最大角度
			let maxAngle = 360 - (awardSettingNumber - 1) * this.data.zpData.oneAngle - 5;
			//旋转区间
			let newAngle = Math.floor(minAngle + Math.random() * (maxAngle - minAngle)) + 360 * 15;
			
			this.setToRotate(newAngle);
			
			setTimeout(() => {
				this.roateEnd(awardSettingNumber);
			}, 5150);
		},50);
	},
	//旋转结束执行
	roateEnd(awardSettingNumber){
		console.log('当前指向格子数 -- ' + awardSettingNumber , this.data.curKey);
		console.log('当前指向格子数对应内容 -- ' + this.data.zpData.awardSetting[awardSettingNumber - 1] , this.data.zpData.awardSetting[this.data.curKey - 1]);
		
		// 是否中奖
		if(this.data.ifWinning){
			console.log('中奖');
		}else{
			console.log('未中奖');
		}
		
		setTimeout(() => {
			this.setData({
				ifRoate : false, //转盘是否在转动
			});
		}, 100);
	},


	//点击抽奖
	getLucky(){
		if(this.data.ifRoate){
			return false;
		}
		
		this.setData({
			ifRoate : true, //转盘是否在转动
			zpRotateDeg : ''
		});
				
		// 请求后台获取抽奖结果中...
		
		/*test*/
		var res = {
			status:1,
			curKey:Math.floor(1 + Math.random() * this.data.zpData.equalParts), //抽奖结果 : 取值范围 1 至 总格子数
			ifWinning:true, //是否中奖
			info:'没机会或什么什么'
		}
		/*test*/
		
		/
			if(res.status == 1){
				this.setData({
					curKey : res.curKey,
					ifWinning : res.ifWinning
				});
				
				this.setRotate(this.data.curKey);
			}else{
				this.setData({
					ifRoate : false, //转盘是否在转动
				});
				wx.showModal({
					title: '温馨提示',
					showCancel:false,
					content: res.info,
				})
			}
		/
	},




	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: function (options) {

	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady: function () {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow: function () {
		this.getZpData();
	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide: function () {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload: function () {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh: function () {

	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom: function () {

	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage: function () {

	}
})

图片资源:

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值