微信小程序转盘抽奖的实现方法

本文实例为大家分享了微信小程序实现转盘抽奖的具体代码,供大家参考,具体内容如下

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 () {
 
    }
})

图片资源:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序实现翻牌抽奖动画

    本文实例为大家分享了微信小程序实现翻牌抽奖的具体代码,供大家参考,具体内容如下 效果图如下所示 这里做的比较简陋,就花了一点时间实现了翻牌抽奖效果,提供思路 .wxml <view class="button" bindtap="again">重新翻牌</view> <view class="curin-index"> <view bindtap="{{whether?'':'tamin'}}&

  • 微信小程序实现走马灯式抽奖

    本文实例为大家分享了微信小程序实现走马灯式抽奖的具体代码,供大家参考,具体内容如下 先来看下效果 设置奖项 awardList是从后台拿到的奖项数组,list不够八位时填充谢谢参与奖项,超过八位时截取数组,然后随机打乱数组,保证奖项随机布局,第四位固定填充立即抽奖按钮 // 设置奖项   settingAward(awardList) {     const len = awardList.length;     const award = {       awardName: '谢谢参与',

  • 微信小程序实现多宫格抽奖活动

    最近闲来无事,做了一个多宫格抽奖的例子,有什么需要改进或者错误的地方,请留言,谢谢 首先看效果: 思路是先让其转动2圈多,然后再进行抽奖,格子运动用的是setTimeout,让其运行的时间间隔不一样,然后产生运动快慢的效果 好了,上代码 首先是WXML(这里面的判断可能有些绕,仔细按顺序看,因其第五个和第十一个格子在不同手机屏幕大小上的显示有问题,所以再次给它们判断了一下) <view class="box"> <view class="boxsub {{l

  • 微信小程序 扭蛋抽奖机css3动画实现详解

    前言 最近快速上线一个抽奖活动,又不想用canvas做,思考了很久,还是决定使用css3的动画来做,只要小球动得快,就没人发现我这些个小球的运动路径都是一样的了.先上动图 wxml文件: <view class="ball-box"> <image class="ball ball_1 {{start?'weiyi_1':''}}" src="https://acceleratepic.miniso.com/miniso/ball1.pn

  • 微信小程序 摇一摇抽奖简单实例实现代码

    微信小程序 摇一摇抽奖 微信小程序目录 为了更好的理解小程序和小程序开发,我们首先来看一下项目的目录. 首先看下根目录下的app.json的文件,可以看到在"pages"的数组里,里面配置了每个界面,且包含了每个界面文件的目录 我们接下来看一下page文件夹,可以看到每个页面需要包含两个文件,一个是js文件,是每个界面的入口,wxml的文件是每个界面的布局文件,wxss是样式文件. 接下来看一下logs文件夹,在logs文件夹中比index文件夹中多出了一个logs.json的文件,l

  • 微信小程序开发之大转盘 仿天猫超市抽奖实例

    天猫超市翻牌的转盘经常用,以前做Android,没啥想法,现在尝试微信小程序,看到别人家APP里有啥好玩的,就想去做一个. 上GIF看效果: 简要的说一下. 1.外面一圈闪烁的小球是用js控制的样式.500ms改变一次样式.简单粗暴; 2.抽奖的item也是js控制背景,但是怎么样让它优雅的停下来是个问题.动画中有timingFunction可以设置速度.自己用js就没那么简单了.我这里用setInterval(),时间是线性变化的.换个斜率先小后大的函数效果应该会好一些. 注释写了一些,凑合这

  • 微信小程序实现九宫格抽奖

    本文实例为大家分享了微信小程序实现九宫格抽奖的具体代码,适用于年会抽奖,供大家参考,具体内容如下 效果图比较卡顿,真实运行效果是旋转的 用到的素材: 实现步骤: 实现原理 改变每一项的透明度实现选中效果.利用setTimeOut时间使旋转速度越来越慢.达到慢慢停止的效果.实际应用中可以将9张奖品图片和中奖项均通过接口返回.以方便奖品的调整. 1.布局绘制 <view class="container"> 停止位置:<input value='{{luckPositio

  • 微信小程序实现转盘抽奖

    本文实例为大家分享了微信小程序实现转盘抽奖的具体代码,供大家参考,具体内容如下 效果图如下所示 .wxml <view class="index"> <view class="xian"></view> <view class="xian"></view> <view class="xian"></view> <view class=&q

  • 微信小程序抽奖组件的使用步骤

    采用微信组件的方式提供,因组件内部使用了async/await,所以请在微信开发者工具"详情=>本地设置 勾上 增强编译和使用npm",小程序npm使用方法请参考:微信小程序-npm支持 先看效果图: 使用步骤: 步骤一: 安装依赖或前往githua下载源码,拷贝dist目录下的lottery-turntable目录 npm i lottery-turntable-for-wx-miniprogram 步骤二: 页面JSON配置 { "usingComponents&q

  • 微信小程序实现简单九宫格抽奖

    本文实例为大家分享了微信小程序实现简单九宫格抽奖的具体代码,供大家参考,具体内容如下 废话不多说,先上样板图 代码就先wxml文件: <view id="container">   <!--左上-->   <view id="li" class='{{amplification_index===1?"indexli":""}}'>     一等奖     <view></v

随机推荐