刮刮前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

196 lines
4.9 KiB

<template>
<!-- 刮奖 -->
<view v-else class="scratch">
<view class="box">
<!-- 刮奖结果图片 -->
<image src="../../static/home/tem11.png" class="img"></image>
<!-- 刮奖canvas容器 -->
<canvas
class="canvas-box"
canvas-id="canvas-id"
:disable-scroll="true"
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd"
></canvas>
<!-- 刮奖前提示消息开始刮奖后隐藏 -->
<cover-view class="tip" v-if="!toDraw">
<cover-view class="text">
<cover-view class="text-tip">你还有</cover-view>
<cover-view class="light">1</cover-view>
<cover-view class="text-tip">次刮奖机会</cover-view>
</cover-view>
<!-- 开始刮奖按钮 -->
<cover-view class="btn" @tap="scratchStart()">
<cover-view class="text">立即刮奖</cover-view>
</cover-view>
</cover-view>
<!-- 如果后端没有不中奖的图则不中奖时默认显示 -->
<!-- <view v-if="hasDraw" class="award-box">
<text class="text">谢谢参与</text>
</view> -->
</view>
</view>
</template>
<script>
import Scratch from './scratch.js'
export default {
data () {
return {
// domain: getApp().globalData.baseUrl, // 服务器域名
toDraw: false, // 是否开始刮奖
showResult: false, // 是否显示抽奖结果
isWin: true, // 是否中奖
scratchWidth: 350, // 绘制刮奖范围宽
scratchHeight: 150, // 绘制刮奖范围高
scratchSize: 10, // 触手大小
scratchScale: 0.25, // 需刮开百分比
prize_img: '', // 中奖图片
isScratching: false ,// 是否正在刮奖,
}
},
methods: {
initCanvas () {
// 刮奖初始化信息必须在onReady后,不然h5不支持(小程序可在onLoad执行)
new Scratch(this, {
canvasId: 'canvas-id',
width: this.scratchWidth,
height: this.scratchHeight,
size: this.scratchSize,
scale: this.scratchScale
})
},
// 请求刮奖结果
doPrizeScratchTicketFun () {
if (this.isScratching) return false
this.isScratching = true
// 请求服务器刮奖结果信息
this.$api.luckDraw
.doPrizeScratchTicket()
.then(res => {
this.prize_img = res.luckyPrize.prize_img
this.luckyPrize = res.luckyPrize
this.isWin = true
if (this.luckyPrize.is_winning === 2) this.isWin = false
this.isScratching = false
})
.catch(() => {
this.isScratching = false
},
// 点击按钮开始刮奖
scratchStart () {
this.toDraw = true
this.initCanvas()
this.doPrizeScratchTicketFun()
}
}
}
</script>
<style lang="scss">
.scratch {
width: 670upx;
height: 320upx;
background: url("../../static/home/tem11.png") no-repeat;
background-size: contain;
margin: 366upx auto 80upx;
padding: 29upx 25upx 21upx;
box-sizing: border-box;
position: relative;
overflow: hidden;
.box {
width: 100%;
height: 100%;
background: #ccc;
border-radius: 20upx;
position: relative;
overflow: hidden;
.img {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.canvas-box {
position: absolute;
top: 0;
left: 0;
width: 100.5%;
height: 100%;
border-radius: 20upx;
overflow: hidden;
}
.tip {
position: absolute;
left: 0;
right: 0;
width: 100%;
height: 100%;
z-index: 999;
text-align: center;
.text {
font-size: 30upx;
font-weight: bold;
color: #444;
margin-top: 69upx;
.text-tip {
display: inline-block;
vertical-align: middle;
}
.light {
// color: $red;
display: inline-block;
vertical-align: middle;
margin: 0 6upx !important;
}
}
.btn {
width: 360upx;
height: 82upx;
border: none;
border-radius: 41upx;
margin: 59upx auto 0;
position: relative;
background: none;
background: #000;
.btn-img {
border: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.text {
display: inline;
position: absolute;
text-align: center;
color: #fff;
font-size: 30upx;
font-weight: bold;
margin: 0;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
}
}
.award-box {
width: 100%;
height: 100%;
border-radius: 20upx;
text-align: center;
line-height: 270upx;
background: #FFF1B9;
.text {
font-size: 40upx;
font-weight: bold;
color: #444;
}
}
}
}
</style>