1***@qq.com
1***@qq.com
  • 发布:2020-12-08 17:19
  • 更新:2020-12-09 10:52
  • 阅读:812

#插件讨论# 【 Almost-Lottery抽奖转盘(Canvas 版) - 雨夜敬清秋 】开始转动设置条件只执行一次

分类:uni-app

为啥我给开始转动 里面设置个条件 就是次数 用完了就弹个提示框出来,提示没有次数 但是它只执行一次 再点击就没反应是什么原因

2020-12-08 17:19 负责人:无 分享
已邀请:
雨夜敬清秋

雨夜敬清秋

把 draw-start 和 draw-end 这 2 个回调函数里你写的代码贴一下

1***@qq.com

1***@qq.com (作者)


                if (this.frequency > 0) {  
                    this.targetName = ''  
                    let list = [...this.prizeList]  
                    // 模拟请求  
                    let stoTimer = setTimeout(() => {  
                        clearTimeout(stoTimer)  
                        stoTimer = null  

                        // 判断是否由前端控制概率  
                        // 前端控制概率的情况下,需要拿到最接近随机权重且大于随机权重的值  
                        // 后端控制概率的情况下,通常会直接返回 prizeId  
                        if (this.onFrontend) {  
                            if (!this.weightTotal) {  
                                // console.warn('###当前已开启前端控制中奖概率,但是奖品数据列表中的 weight 参数似乎配置不正确###')  
                                return  
                            }  
                            // console.warn('###当前处于前端控制中奖概率,安全起见,强烈建议由后端控制###')  
                            // console.log('当前权重总和为 =>', this.weightTotal)  

                            // 注意这里使用了 Math.ceil,如果某个权重的值为 0,则始终无法中奖  
                            let weight = Math.ceil(Math.random() * this.weightTotal)  
                            // console.log('本次权重随机数 =>', weight)  

                            // 生成大于等于随机权重的数组  
                            let tempMaxArrs = []  
                            list.forEach((item) => {  
                                if (item.weight >= weight) {  
                                    tempMaxArrs.push(item.weight)  
                                }  
                            })  
                            // 如果大于随机权重的数组有值,先对这个数组排序然后取值  
                            // 反之新建一个临时的包含所有权重的已排序数组,然后取值  
                            if (tempMaxArrs.length) {  
                                tempMaxArrs.sort((a, b) => a - b)  
                                this.prizeIndex = this.weightArr.indexOf(tempMaxArrs[0])  
                            } else {  
                                let tempWeightArr = [...this.weightArr]  
                                tempWeightArr.sort((a, b) => a - b)  
                                this.prizeIndex = this.weightArr.indexOf(tempWeightArr[tempWeightArr.length - 1])  
                            }  
                        } else {  
                            // console.warn('###当前处于模拟的随机中奖概率,实际场景中,中奖概率应由后端控制###')  
                            // 这里随机产生的 prizeId 是模拟后端返回的 prizeId  
                            let prizeId = Math.floor(Math.random() * list.length + 1)  
                            list.forEach((item, index) => {  
                                if (item.prizeId === prizeId) {  
                                    // 中奖下标  
                                    this.prizeIndex = index  
                                }  
                            })  
                        }  
                        // console.log(this.prizeIndex)  
                        // console.log('本次抽中奖品 =>', this.prizeList[this.prizeIndex].name)  
                        if (this.onStock) {  
                            console.log('本次奖品库存 =>', this.prizeList[this.prizeIndex].stock)  
                        }  
                        // 提交抽奖结果  
                        uni.request({  
                            url: 'http://192.168.100.74/checkIn/addTurntableRecord',  
                            method:'POST',  
                            data: {  
                                userid: this.userId,  
                                size: this.prizeList[this.prizeIndex].size,  
                                turntableInfo: this.prizeList[this.prizeIndex].name  
                            },  
                            success: (res) => {  
                                if(res.data.code!=1) {  
                                    uni.showToast({  
                                        title:res.data.errinsg,  
                                        duration: 2000,  
                                        mask: true,  
                                        icon: 'none'  
                                    })  
                                }  
                            }  
                        })  
                    }, 200);  
                    this.frequency--;  
                    console.log(this.frequency)  
                } else {  
                    if (this.look==0) {  
                        uni.showToast({  
                            title: "您的抽奖次数为0,欢迎下次再来",  
                            duration: 2000,  
                            mask: true,  
                            icon: 'none'  
                        })  
                    }   
                }  

            },  
            // 本次抽奖结束  
            handleDrawEnd() {  
                // 旋转结束后,可以执行拿到结果后的逻辑  
                let prizeName = this.prizeList[this.prizeIndex].name  
                // if (this.onStock) {  
                //  let prizeStock = this.prizeList[this.prizeIndex].stock  
                //  this.targetName = prizeName === '谢谢参与' ? prizeName : prizeStock ? `恭喜您,获得 ${prizeName}` : '很抱歉,您来晚了,当前奖品已无库存'  
                // }  

                this.targetName = prizeName === '谢谢参与' ? prizeName : `恭喜您,获得 ${prizeName}`;  
                if (this.frequency==0&&this.look>0) {  
                    uni.showModal({  
                        title: "看视频,获抽奖机会",  
                        content: `${this.targetName },您的次数已用完,是否前往观看视频,获取抽奖机会,今日还有${this.look}次机会`,  
                        success: function(res) {  
                            if (res.confirm) {  
                                console.log('用户点击确定');  
                                this.look--;  
                                // Window.android.onWatchVideos();  
                            } else if (res.cancel) {  
                                console.log('用户点击取消');  
                            }  
                        },  
                    })  
                }else {  
                    uni.showToast({  
                        title: `${this.targetName},您还有${this.frequency}次机会`,  
                        icon: 'none'  
                    })  
                }  

            }```
  • 雨夜敬清秋

    frequency 和 look 都代表啥,看你代码,都是代表抽奖次数啊,只要示例项目正常,你添加任何业务上的需求,都不会影响到转盘的,还是仔细检查下自己代码逻辑吧

    2020-12-09 10:29

1***@qq.com

1***@qq.com (作者)

frequency 是抽奖次数 look是看视频的次数 抽奖次数用完 就弹出是否去看视频 看视频可以获得抽奖次数

1***@qq.com

1***@qq.com (作者)

先不考虑其它逻辑 就是当次数为0的时候 他会弹出第一次 但是 当我再点击的时候 就会没反应 不应该继续弹出提示框 提醒没有次数了吗

该问题目前已经被锁定, 无法添加新回复