微信小程序活动抽奖简单实现,包教包会

问题:

针对用户使用活动抽奖,获得抽奖得到商品的成就以及满足感,那么我们应该怎么去实现小程序去转盘抽奖活动呢

例如:项目需要抽奖实现相应的奖品奖励


实现方法

实现的效果如下:

 实现的主要代码:

Page({data: {dotList: [],dotColor1: 'pink', //圆点颜色1  dotColor2: 'linear-gradient(180deg, #1BFCE2 0%, #DBF5FF 100%)', //圆点颜色2  remian_num: 5, //剩余抽奖的次数prize_list: [],lock: false, //防止重复点击prizeListIndex: [0, 1, 2, 4, 7, 6, 5, 3], //抽奖顺序的索引prizeListIndex1: [0, 1, 2, 7, 3, 6, 5, 4], //奖品索引over: false, //是否加载完奖品数据start_btn: true, //是否有抽奖机会innerAudioContext: "", //按钮音},// 范围随机数randomRange(lower, upper) {return Math.floor(Math.random() * (upper - lower)) + lower;},onLoad: function (options) {this.init()},init() {//圆点设置  var leftCircle = 7.5;var topCircle = 8;var dotList = [];for (var i = 0; i < 28; i++) {if (i == 0) {topCircle = 8;leftCircle = 64;} else if (i < 8) {topCircle = 8;leftCircle = leftCircle + 72;} else if (i == 8) {topCircle = 54leftCircle = 626;} else if (i < 14) {topCircle = topCircle + 86;leftCircle = 626;} else if (i == 14) {topCircle = 538;leftCircle = 570;} else if (i < 22) {topCircle = 538;leftCircle = leftCircle - 72;} else if (i == 22) {topCircle = 484;leftCircle = 10;} else if (i < 28) {topCircle = topCircle - 86;leftCircle = 10;} else {return}dotList.push({topCircle: topCircle,leftCircle: leftCircle});}this.setData({dotList: dotList})// 圆点闪烁  setInterval(() => {if (this.data.dotColor1 == 'pink') {this.setData({dotColor1: 'linear-gradient(180deg, #1BFCE2 0%, #DBF5FF 100%)',dotColor2: 'pink',})} else {this.setData({dotColor1: 'pink',dotColor2: 'linear-gradient(180deg, #1BFCE2 0%, #DBF5FF 100%)',})}}, 500)},onShow: function () {this.getData();},getData() {var list = [{id: "001",icon: '/img/wuliu_icon5.png',name: '奖品一',},{id: "002",icon: '/img/wuliu_icon5.png',name: '谢谢惠顾',},{id: "003",icon: '/img/wuliu_icon5.png',name: '奖品二',},{id: "004",icon: '/img/wuliu_icon5.png',name: '奖品三',},{id: "005",icon: '/img/wuliu_icon5.png',name: '奖品四',},{id: "006",icon: '/img/wuliu_icon5.png',name: '谢谢惠顾',},{id: "007",icon: '/img/wuliu_icon5.png',name: '奖品五',},{id: "008",icon: '/img/wuliu_icon5.png',name: '奖品六',},];let prize_list = list;let pIndex = this.data.prizeListIndex1;for (let i in prize_list) {prize_list[i].active = false;prize_list[i].index = pIndex[i];}this.setData({prize_list,over: true})},// 抽奖动画Timer: null,LotteryEnd: false, //抽奖结束nowRunIndex: 0, //ative样式的索引,luckChose(luckIndex) {return new Promise((resolve, reject) => {let that = thislet maxTime = this.randomRange(2500,4000);let time_speed = 0.01; //速率if (this.nowRunIndex == 0) { //初始化从索引0开始显示抽奖激活的边框this.setData({'prize_list.[0].active': true})}function lotteryRun(time) {that.Timer = setTimeout(() => {let list = that.data.prize_list;++that.nowRunIndex;that.nowRunIndex >= that.data.prizeListIndex.length ? that.nowRunIndex = 0 : '';let Pindex = that.data.prizeListIndex[that.nowRunIndex];console.log(Pindex)list.map((item, index) => {item.active = Pindex == index;})that.setData({prize_list: list})if (that.LotteryEnd && luckIndex == that.nowRunIndex) {clearTimeout(that.Timer);that.LotteryEnd = false;that.setData({lock: false})resolve(list.filter(v => {return v.active}))} else {time_speed += 0.5;lotteryRun(time + (time_speed));}}, time);}lotteryRun(80);setTimeout(() => {this.LotteryEnd = true;}, maxTime);})},audioPlay() {const innerAudioContext = wx.createInnerAudioContext()innerAudioContext.autoplay = false // 是否自动开始播放,默认为 falseinnerAudioContext.loop = true // 是否循环播放,默认为 falsewx.setInnerAudioOption({ // ios在静音状态下能够正常播放音效obeyMuteSwitch: false, // 是否遵循系统静音开关,默认为 true。当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音。success: function (e) { },fail: function (e) { }})innerAudioContext.src = "/pages/jsCase/img/btnaudio.mp3"innerAudioContext.play();this.setData({innerAudioContext,})},lottery() {if (!this.data.over) return// 防止重复点击if (this.data.lock) returnthis.setData({lock: true})let {prize_list} = this.data;if (this.data.remian_num.length <= 0 || this.data.prize_list.length === 0) return;this.audioPlay()let id = "005",currIndex = "";for (let i in prize_list) {if (id == prize_list[i].id) {currIndex = prize_list[i].index}}this.luckChose(currIndex).then(res => {this.data.innerAudioContext.stop()wx.showToast({title: '你抽中了' + res[0].name,icon: 'none'})})},
})

活动转盘抽奖,实现起来比较简单,但是细节也是挺多的,比如抽奖声音的播放以及停止

活动的转盘特效以及活动抽奖中了之后需要展示的效果以及处理等。

总结

为了方便大家,节约大家的时间,下面我将源码推送给你们,包教包会哈,拿来直接可以使用,不懂的可以私聊我

资源下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26838.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上手vue2的学习笔记5之在vue2项目中调用elment-ui

前言 上手vue2的学习笔记4之搭建vue环境 参考链接&#xff1a;vue2.0项目引入element-ui 一、安装elment-ui 进入搭建的vue项目中 cd vue_bing_test 安装 element npm i element-ui二、引入elment-ui elment官方教程 将main.js改成如下内容&#xff1a; import Vue fro…

行业报告 | AI 赋能,人形机器人产业提速,把握产业链受益机会(上)

文 | BFT机器人 01 核心观点 核心观点: 人形机器人产业发展仍处于 0-1 阶段&#xff0c;当前行业投资逻辑偏向事件驱动型的主题投资&#xff0c;但可落地服务场景的人形机器人成长空间非常广阔&#xff0c;值得长期关注。本文将围绕以下热点问题作出讨论: D当前节点人形机器人产…

常用API学习03(Java)

String char charAt(int index) 返回char指定索引处的值 char[] toCharArray() 将此字符串转换为新的字符数组 int compareTo(String anotherString) 按字典顺序比较两个字符串 boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列才返…

C语言程序设计——字符、字符串、内存函数

一、长度不受限的字符串函数 1. strlen size_t strlen(const char* str); 功能&#xff1a;求字符串长度 &#xff08;1&#xff09;字符串以\0作为结束标志&#xff0c;strlen函数返回的是在字符串中\0之前出现的字符个数&#xff08;不包含\0&#xff09;。 &#xff08…

字符串相加(力扣)

Problem: 415. 字符串相加 文章目录 思路Code复杂度运行结果 思路 创建一个StringBuilder对象使用append方法追加每位数字相加&#xff0c;使用双指针的方式&#xff0c;指针i&#xff0c;j分别指向num1和num2的每位数字&#xff0c;从后往前&#xff0c;进位用carry存储着。 …

感知网络安全态势是什么?感知网络安全态势如何实施

网络安全是当今社会中一个非常重要的话题。随着互联网的普及和信息技术的发展&#xff0c;网络安全问题日益突出。为了有效应对各种网络威胁和攻击&#xff0c;网络安全态势感知成为了一种关键的技术手段。 网络安全态势感知的定义 网络安全态势感知是指通过对网络环境中的各种…

微服务保护

一、初识 Sentinel 1. 雪崩问题及解决方案 微服务调用链路中的某个服务故障&#xff0c; 引起整个链路中的所有微服务都不 可用&#xff0c;这就是雪崩 常见解决方式有四种&#xff1a; ① 超时处理&#xff1a;设定超时时间&#xff0c;请求超 过一定时间没有响应就返回错误信…

同步和异步的区别

同步&#xff0c;可以理解为在执行完一个函数或方法之后&#xff0c;一直等待系统返回值或消息&#xff0c;这时程序是处于阻塞的&#xff0c;只有接收到返回的值或消息后才往下执行其他的命令&#xff1b; 异步&#xff0c;执行完函数或方法后&#xff0c;不必阻塞性地等待返回…

每天一道C语言编程练习(5):尼科彻斯定理

题目描述 验证尼科彻斯定理&#xff0c;即&#xff1a;任何一个整数m的立方都可以写成m个连续奇数之和。 输入格式 任一正整数 输出格式 该数的立方分解为一串连续奇数的和 样例输入 13 样例输出 13*13*132197157159161163165167169171173175177179181 代码如下&#…

C++模拟实现unordered_map和unordered_set(哈希)

目录 一、unordered系列关联式容器 1.1 unordered_map 1.1.1 unordered_map 1.1.2 unordered_map接口说明 1. unordered_map的容量 2. unordered_map的迭代器 3.unordered_map的元素访问 4. unordered_map的查询 5. unordered_map的修改操作 6. unordered_map的桶操作…

学习率的选择

学会画图去看学习率是否符合 梯度下降算法收敛所需要的迭代次数根据模型的不同而不同&#xff0c;我们不能提前预知&#xff0c;我们可以绘制迭代次数和代价函数的值的图表来观测算法在何时趋于收敛。 -自动测试方法 也有一些自动测试是否收敛的方法&#xff0c;例如将代价函数…

学无止境·MySQL⑧(Redis)

Redis和Mongodb练习 Redis1、安装redis2、string类型数据的命令操作&#xff1a;设置键值&#xff1a;读取键值数值类型自增1数值类型自减1查看值的长度 3、list类型数据的命令操作对列表city插入元素&#xff1a;Shanghai Suzhou Hangzhou将列表city里的头部的元素移除将name列…