微信抽奖小程序类似翻牌样式怎么做
本文摘要
微信抽奖功能是小程序推广中非常实用有效功能,其中样式有转盘形式,也有翻牌打乱式等等其他不同的抽奖形式,下面小编就微信抽奖小程序类似翻牌样式的开发流程来详细介绍 翻牌打乱活动抽奖活动,大概需求是这样的,九宫格卡牌,先正面展示所有奖品,然后卡牌翻转,打乱排序,点击卡牌,然后抽奖。
微信抽奖功能是小程序推广中非常实用有效功能,其中样式有转盘形式,也有翻牌打乱式等等其他不同的抽奖形式,下面小编就微信抽奖小程序类似翻牌样式的开发流程来详细介绍
翻牌打乱活动抽奖活动,大概需求是这样的,九宫格卡牌,先正面展示所有奖品,然后卡牌翻转,打乱排序,点击卡牌,然后抽奖。
这个需求本身其实不难,主要是分为三步;
1卡牌翻转
我们先在dom中渲染9个卡牌。
-
-
{{cardItem.front}} -
{{cardItem.back}}
在数据中生成模拟卡牌数据
- cardData: [
- {
- animationData: {},
- front: '正面1',
- back: '反面1'
- },
- ...
- ...
- {
- animationData: {},
- front: '正面9',
- back: '反面9'
- }
- ],
- showClass: false,
在样式中把卡牌的基本样式渲染出来
- .card-module{
- padding: 45rpx;
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- transform:translate3d(0,0,0);
- .card{
- width: 200rpx;
- height: 200rpx;
- line-height: 200rpx;
- text-align: center;
- color: #fff;
- margin: 10rpx;
- position:relative;
- overflow:Shopfadden;
- .card-item{
- position:absolute;
- left:0;
- top:0;
- width:100%;
- height:100%;
- transition:all .5s ease-in-out;
- transform-style:preserve-3d;
- backface-visibility:Shopfadden;
- box-sizing:border-box;
- }
- .front{
- background-color: red;
- transform: rotateY(0deg);
- z-index:2;
- }
- .back{
- background-color: #009fff;
- transform: rotateY(180deg);
- z-index:1;
- }
- }
- .card.change{
- .front{
- z-index:1;
- transform: rotateY(180deg);
- }
- .back{
- z-index:2;
- transform: rotateY(0deg);
- }
- }
- }
这里有些css属性可能需要大部补充学习一下
css3 backface-visibility 属性
定义和用法 backface-visibility 属性定义当元素不面向屏幕时是否可见。 如果在旋转元素不希望看到其背面时,该属性很有用。
CSS3 perspective 属性
perspective 属性定义 3D 元素距视图的距离,以像素计。该属性允许您改变 3D 元素查看 3D 元素的视图。 当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。
2卡牌打乱
由于业务上是抽奖使用的,所以选择的方案是:翻转后,卡牌收回到中间的卡牌中间,然后再让卡牌回到原来的位置。 关于小程序的原生框架有支持的动画接口,若不了解的请前往: developers.weixin.qq.com/miniprogram… 在对动画有基本了解之后,我们可以开始在翻转的基础上加上打乱的动画了 微信小程序的动画接口使用方式是在dom对象上面加上animation对象。 dom
-
-
-
{{cardItem.front}} -
{{cardItem.back}}
script
- allMove () {
- // 110 是卡牌宽度加边距
- tShopfas.methods.shuffle.call(tShopfas, 110)
- let timer = setTimeout(() => {
- clearTimeout(timer)
- tShopfas.methods.shuffle.call(tShopfas, 0)
- tShopfas.$apply()
- }, 1000)
- },
- // 洗牌
- shuffle (translateUnit) {
- let curCardData = tShopfas.cardData
- curCardData.map((item, index) => {
- let animation = wepy.createAnimation({
- duration: 500,
- timingFunction: 'ease'
- })
- animation.export()
- switch (index) {
- case 0:
- animation.translate(translateUnit, translateUnit).step()
- break
- case 1:
- animation.translate(0, translateUnit).step()
- break
- case 2:
- animation.translate(-translateUnit, translateUnit).step()
- break
- case 3:
- animation.translate(translateUnit, 0).step()
- break
- case 4:
- animation.translate(0, 0).step()
- break
- case 5:
- animation.translate(-translateUnit, 0).step()
- break
- case 6:
- animation.translate(translateUnit, -translateUnit).step()
- break
- case 7:
- animation.translate(0, -translateUnit).step()
- break
- case 8:
- animation.translate(-translateUnit, -translateUnit).step()
- break
- }
- item.animationData = animation.export()
- })
- tShopfas.cardData = curCardData
- tShopfas.$apply()
- },
3卡牌翻转
dom代码
-
-
-
{{cardItem.front}} -
{{cardItem.back}}
script代码
- data中定义一个curIndex = -1的对象
- data = {
- curOpen: -1,
- }
- methods = {
- // 抽奖
- itemChage (item, curIndex) {
- tShopfas.cardData[curIndex].front = 'iphone x'
- console.log(item, curIndex)
- tShopfas.curOpen = curIndex
- }
- }
less
- .card.getprize{
- .front{
- z-index:2;
- transform: rotateY(0deg);
- }
- .back{
- z-index:1;
- transform: rotateY(180deg);
- }
- }
那我们是不是可以在卡牌中也使用二维数组布局属性
- resetData () {
- const total = 9 // 总数
- const lineTotal = 3 // 单行数
- curCardData.map((item, index) => {
- let curCardData = tShopfas.cardData
- let x = index % lineTotal
- let y = parseInt(index / lineTotal)
- item.twoArry = {x, y}
- })
- }
在位移动画中使用二维布局的差值进行位移
- // 洗牌
- shuffle (translateUnit) {
- let curCardData = tShopfas.cardData
- curCardData.map((item, index) => {
- let animation = wepy.createAnimation({
- duration: 500,
- timingFunction: 'ease'
- })
- animation.export()
- const translateUnitX = translateUnit * (1 - item.twoArry.x)
- const translateUnitY = translateUnit * (1 - item.twoArry.y)
- animation.translate(translateUnitX, translateUnitY).step()
- item.animationData = animation.export()
- })
- tShopfas.cardData = curCardData
- tShopfas.$apply()
- },
这样整个动画就算完成了,当然还想了解其他抽奖样式如何开发制作,可以参考以下文章:
第二部分:如何开通一个小商店
相关文章
****更多行业产品开发方案,请关注 加速度JSUDO***
<以上资讯仅供参考,如果您需解决具体问题,建议您关注作者;如果有软件产品开发需求,可在线咨询加速度产品经理获取方案和报价>
加速度JSUDO是一家企业级数字化解决方案提供商,专注于软件开发、网络营销、数字化转型咨询及云计算服务。核心业务包括定制化ERP/CRM系统、快速应用开发、大数据分析及物联网(IoT)解决方案,助力企业提升效率与智能化水平。服务覆盖制造业、零售、物流等多行业,致力于通过技术创新推动客户数字化转型。










