最近闲来无事,做了一个多宫格抽奖的例子,有什么需要改进或者错误的地方,请留言,谢谢

首先看效果

思路是先让其转动2圈多,然后再进行抽奖,格子运动用的是setTimeout,让其运行的时间间隔不一样,然后产生运动快慢的效果

好了,上代码

首先是WXML(这里面的判断可能有些绕,仔细按顺序看,因其第五个和第十一个格子在不同手机屏幕大小上的显示有问题,所以再次给它们判断了一下)

<view class="box"><view class="boxsub {{luckynum==index?'luck':''}}" wx:for='{{box}}' style="{{index>0&&index<4?'top:0;left:'+index*140+'rpx;':(index>3&&index<8?'right:0;top:'+((index-4)*100)+'rpx;':(index>7&&index<12?'bottom:0;right:'+(index-7)*140+'rpx;':(index>11&&index<14?'left:0;bottom:'+(index-11)*100+'rpx;':'')))}} {{index=='4'?'top:0;':''}} {{index=='11'?'left:0;':''}} " wx:key=''><text class='boxcontent' style='{{item.name.length>6?"line-height:40rpx;margin-top:10rpx;":"line-height:100rpx;"}}'>{{item.name}}</text> </view><view class="lucky" catchtap="luckyTap"><text class="taplucky">点击抽奖</text><text class="howMany">您还有<text class="howMany_num" >{{howManyNum}}</text>次抽奖机会</text></view>
</view>
<view class="explain"></view>

WXSS:

.box{margin:20rpx 25rpx;height: 400rpx;width: 698rpx;/*border:1px solid #ddd;*/position: relative;/*box-sizing: border-box;*/
}
.boxsub{width: 140rpx;height: 100rpx;/*border: 1px solid #f00;*/box-sizing: border-box;position: absolute;background: #ff6100;border: 1rpx solid #fff;}
.boxcontent{text-align: center;font-size: 26rpx;display: block;color: #fff;
}
.lucky{width: 300rpx;height:130rpx;background:#ff6100;/* #ff6100;007FFF*/position: absolute;left: 0;bottom: 0;right: 0;top: 0rpx;margin: auto;
}.lucky:active{opacity: 0.7;
}
.taplucky{display: block;text-align: center;font-size: 30rpx;line-height: 50rpx;height: 50rpx;color: #fff;margin-top: 20rpx;
}
.howMany{display: block;text-align: center;font-size: 26rpx;color: #fff;line-height: 40rpx;height: 40rpx;
}
.howMany_num{color:#007FFF;font-size:32rpx;line-height:40rpx;padding:0 10rpx;
}
.luck{opacity: 0.5;background: #ff6100;
}

JS

var time = null;//setTimeout的ID,用clearTimeout清除
Page({data: {box: [{name:'100积分'}, {name: '10元优惠券\n满100可用'}, {name: '60积分'}, {name: '30积分'}, {name: '50积分'}, {name: '30元优惠券\n满120可用'}, {name: '100积分'}, {name: '200积分'}, {name: '10积分'}, {name: '50积分'}, {name: '40积分'}, {name: '50优惠券满500可用'}, {name: '60积分'}, {name: '70积分'}],luckynum:0,//当前运动到的位置,在界面渲染howManyNum:10,//抽奖的剩余次数
    content:{index: 0,    //当前转动到哪个位置,起点位置count: 0,    //总共有多少个位置speed: 50,    //初始转动速度cycle: 3*14,    //转动基本次数:即至少需要转动多少次再进入抽奖环节,这里设置的是转动三次后进入抽奖环节
    },prize:0,//中奖的位置luckytapif:true//判断现在是否可以点击
  },//点击抽奖luckyTap:function(){var i=0,that=this,howManyNum = this.data.howManyNum,//剩余的抽奖次数luckytapif = this.data.luckytapif,//获取现在处于的状态luckynum = this.data.luckynum,//当前所在的格子prize =Math.floor(Math.random()*14) ;//中奖序号,随机生成if (luckytapif && howManyNum>0){//当没有处于抽奖状态且剩余的抽奖次数大于零,则可以进行抽奖console.log('prize:'+prize);this.data.content.count=this.data.box.length;this.setData({howManyNum:howManyNum-1//更新抽奖次数
      });this.data.luckytapif=false;//设置为抽奖状态this.data.prize = prize;//中奖的序号this.roll();//运行抽奖函数} else if (howManyNum == 0 && luckytapif){wx.showModal({title: '',content: '您的抽奖次数已经没有了',showCancel:false})}},
//抽奖roll:function(){var content=this.data.content,prize = this.data.prize,//中奖序号that=this;if (content.cycle - (content.count-prize)>0){//最后一轮的时间进行抽奖content.index++;content.cycle--;this.setData({luckynum: content.index%14  //当前应该反映在界面上的位置
      });setTimeout(this.roll, content.speed);//继续运行抽奖函数}else{if (content.index < (content.count*3 + prize)){//判断是否停止
content.index++;  content.speed += (550 /14);//最后一轮的速度,匀加速,最后停下时的速度为550+50this.data.content=content;this.setData({luckynum: content.index % 14});console.log(content.index, content.speed);//打印当前的步数和当前的速度setTimeout(this.roll,content.speed);}else{//完成抽奖,初始化数据console.log('完成');content.index =0;content.cycle = 3 * 14;content.speed = 50;this.data.luckytapif = true;clearTimeout(time);wx.showModal({title: '',content: '恭喜你抽到了'+that.data.box[prize].name,showCancel:false})}}},onLoad: function (options) {},onReady: function () {},onShow: function () {},onHide: function () {},onUnload: function () {}
})

完结。

想了解更多的小程序的知识请添加微信小程序开发交流群:368506119

转载于:https://www.cnblogs.com/xjwy/p/7215989.html

微信小程序多宫格抽奖相关推荐

  1. 微信小程序六宫格抽奖

    用微信小程序做一个抽奖活动 一轮是6个红包,需要在第三轮听下转动,初始一个随机数在13-18之间随机来进行抽奖 //页面的渲染 <view class="container" ...

  2. [微信小程序专题] 宫格导航设计

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题 在很多APP软件,都会设置宫格导航,那么是如何设计的呢? ...

  3. 微信小程序 9宫格翻牌动画

    9宫格翻牌需求: 1.进来时平铺9个格子显示 2.点击开始抽奖时洗牌动作 3.洗完牌后呈现9个都是未翻牌的状态 4.点击任意一个牌子,有翻转的动作 5.翻转结束后出现中奖的弹窗 555,当时真的一点一 ...

  4. vue 图片宫格_微信小程序多宫格/九宫格抽奖 基于vue来写

    /*整体布局采用定位实现 gameBox:父盒子,最外层背景图 bg1:灰色灯 bg2:点击开始按钮后,白色灯出现,同时要每个500s同bg1做切换隐藏显示 start:按钮样式 item1-8:通过 ...

  5. 微信小程序实现大转盘抽奖----踩坑之路

    微信小程序实现大转盘抽奖----踩坑之路 需求:现在有一个小程序抽奖页面如下,此类抽奖方式为大转盘 思路:由服务端获取抽奖次数和奖品,根据服务端的中奖概率来决定是否中奖,最后利用小程序动画将转盘转起来 ...

  6. 微信小程序制作一个老虎机抽奖动画

    可以把随机数换成后端传递的数据控制抽奖结果 效果图: 动图有点卡- wxml <view class="content relative"><view class ...

  7. 微信小程序实现单元格编辑功能,并支持计算合计

    最近有个客户想做下单系统,要求像电脑端一样 ,实现在多维的录入功能,客户主要是人事鞋批发的,要求颜色.尺码对应订购数量,可以计算横向和纵向合计,话不多说,直接上代码. 效果如下: 如上图,除了第一行和 ...

  8. 微信小程序合并单元格

    https://blog.csdn.net/weixin_34355715/article/details/87962188

  9. 如何实现消息功能_如何实现微信小程序的轮盘抽奖功能

    为了吸引用户,商家会做一些活动,利用赠送或充值的积分来进行抽奖,现在来讲下微信小程序如果实现轮盘抽奖的功能,先看下图: 上面展示的就是轮盘抽奖,一共有六个奖项,其中一个是"不中奖" ...

最新文章

  1. Manning大神牵头,斯坦福开源Python版NLP库Stanza:涵盖66种语言
  2. 计算机丢失faultrep.dll,faultrep.dll是什么文件?
  3. 无法完成安装:'unsupported configuration: hda-duplex not supported in this QEMU binary'
  4. 不重启JVM,替换掉已经加载的类,偷天换日?
  5. python是什么公司开发的软件-软件开发|什么是行为驱动的 Python?
  6. 基于Boost::beast模块的快速WebSocket服务器
  7. 【原】a.class与a .class的区别
  8. 用javascript写Android和iOS naitve应用,实在炫酷。
  9. mysql新建用户并授权_Mysql中新建用户及授权的方法分享
  10. 并查集(2)-按秩合并和路径压缩
  11. Django:数据进行md5加密
  12. wordpress怎么修改地址栏小图标
  13. sql语句多条件查询语句拼接
  14. matlab相对误差均值计算公式,相对误差怎么算_平均相对误差怎么计算公式
  15. android x86触屏驱动下载,农步祥作品 - 使用台式机和触摸屏玩Android X86 [Soomal]
  16. Windows xp IIS 信息服务组件安装包
  17. 深度诗歌阅读:你永远是个孩子
  18. Android到底凉不凉?34岁Android程序员用自己的故事告诉你
  19. StatusBar用法
  20. pip install psycopg2报错

热门文章

  1. 电脑版---QQ表情收藏测试用例
  2. 使用linux分布编译,Linux UVC driver 交叉编译
  3. I2C裸机驱动程序设计
  4. 华为手机自定义铃声的方法
  5. 包子笔记 - 知己的重要性
  6. 一个小码农的四年工作回忆录,阿里内部核心Java进阶手册
  7. Android ANR 搜集
  8. 华为nova6se支持鸿蒙系统吗,华为nova6se如何打开深色模式 不止一种开启方法
  9. android最新版本 note8,惊喜!三星Note8国行版安卓8.0终于来了:4月23日开推
  10. cp是什么意思?网络语言cp解释