146 lines
2.6 KiB
Vue
146 lines
2.6 KiB
Vue
<template>
|
||
<view>
|
||
<view class="scratch" :style="style_wh">
|
||
<view class="box" :style="{background: themeColor }">
|
||
<!-- 结果-->
|
||
<view class="result" :style="[{'font-size':txtFontSize+'rpx'},{color: txtColor }]">
|
||
<text>{{result_txt}}</text>
|
||
</view>
|
||
<!-- 刮奖canvas容器 -->
|
||
<canvas class="canvas-box" :canvas-id="canvasId" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd"></canvas>
|
||
</view>
|
||
|
||
</view>
|
||
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import scratch from './scratch.js'
|
||
export default {
|
||
props: {
|
||
result_txt: {
|
||
type: String,
|
||
default: '结果',
|
||
},
|
||
// 绘制刮范围高
|
||
height: {
|
||
type: Number,
|
||
default: 150
|
||
},
|
||
// 绘制刮范围宽
|
||
width: {
|
||
type: Number,
|
||
default: 350
|
||
},
|
||
|
||
themeColor: {
|
||
type: String,
|
||
default: '#33CCCC',
|
||
},
|
||
txtColor: {
|
||
type: String,
|
||
default: '#FFFFFF',
|
||
},
|
||
txtFontSize: {
|
||
type: Number,
|
||
default: 50,
|
||
},
|
||
canvasId: {
|
||
type: String,
|
||
default: 'blow',
|
||
},
|
||
},
|
||
|
||
data() {
|
||
return {
|
||
|
||
scratchSize: 10, // 触手大小
|
||
scratchScale: 0.30, // 需刮开百分比
|
||
}
|
||
},
|
||
computed: {
|
||
style_wh() {
|
||
let that = this;
|
||
var height = parseInt(that.height);
|
||
var width = parseInt(that.width);
|
||
var style = '';
|
||
if (height > 0) {
|
||
style = `height:${height*1.5}rpx;`;
|
||
}
|
||
if (width > 0) {
|
||
style += `width:${width*1.5}rpx;`;
|
||
}
|
||
|
||
return style;
|
||
},
|
||
},
|
||
|
||
methods: {
|
||
touchStart(){},
|
||
touchMove(){},
|
||
touchEnd(){},
|
||
initBlow() {
|
||
// 刮初始化信息必须在onReady后,不然h5不支持(小程序可在onLoad执行)
|
||
new scratch(this, {
|
||
canvasId: this.canvasId,
|
||
width: this.scratchWidth,
|
||
height: this.scratchHeight,
|
||
size: this.scratchSize,
|
||
scale: this.scratchScale
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
.scratch {
|
||
|
||
background-size: contain;
|
||
margin: 20rpx auto;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
|
||
.box {
|
||
width: 100%;
|
||
height: 100%;
|
||
// background: #aaaa7f;
|
||
border-radius: 10rpx;
|
||
position: relative;
|
||
overflow: hidden;
|
||
|
||
.result {
|
||
height: 100%;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
// font-size: 50rpx;
|
||
// color: #FFFFFF;
|
||
}
|
||
|
||
.canvas-box {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
border-radius: 10rpx;
|
||
overflow: hidden;
|
||
}
|
||
}
|
||
|
||
.tip {
|
||
position: fixed;
|
||
text-align: center;
|
||
top: 300rpx;
|
||
left: 300rpx;
|
||
width: 150rpx;
|
||
font-size: 40rpx;
|
||
font-weight: bold;
|
||
z-index: 999;
|
||
}
|
||
}
|
||
</style>
|