效果图:
主要属性:globalCompositeOperation
代码:
<template>
<div class="guaguaka" id="guauguaka" ref="guauguaka">
<div class="awards">谢谢参与</div>
<canvas id="canvas" ref="canvas" width="375" height="150"></canvas>
</div>
</template>
<script>
export default {
mounted() {
let canvas = this.$refs.canvas
let ggk = this.$refs.guauguaka
let ctx = canvas.getContext("2d")
ctx.fillStyle = '#999'
ctx.fillRect(0,0,375,150)
ctx.font = '30px 楷体'
ctx.fillStyle = '#FFF'
ctx.fillText('刮刮卡',150,75)
var isDraw = false
// 设置isDraw = true 意思是允许绘制
canvas.onmousedown = () => {
console.log('onMounseDown');
isDraw = true
}
canvas.onmousemove = (e) => {
if(isDraw) {
console.log('onMounseMove',e);
let x = e.pageX - ggk.offsetLeft
let y = e.pageY - ggk.offsetTop
ctx.globalCompositeOperation = 'destination-out'
ctx.arc(x,y,20,0,2*Math.PI)
ctx.fill()
}
}
canvas.onmouseup = () => {
console.log('onMounseUp');
isDraw = false
}
}
}
</script>
<style lang="less" scoped>
.awards{
width: 100%;
height: 150px;
border: 1px solid red;
text-align: center;
font-size: 30px;
line-height: 150px;
}
.guaguaka{
position: relative;
#canvas{
position: absolute;
left: 0;
top: 0;
}
}
</style>
以下是vue3实现的部分,注意的是vue3中没有this,于是获取refs方法有所改变,参考【https://blog.csdn.net/weixin_43090018/article/details/120544804】
代码部分:
<template>
<div class="guaguaka" id="guauguaka" ref="guauguaka">
<div class="awards">谢谢参与</div>
<canvas id="canvas"
@touchstart="touchstart" @touchmove="touchmove" @touchend="touchend" ref="canvas" width="375" height="150"></canvas>
</div>
<!-- <van-button type="primary" @click="download">点击下载图片</van-button> -->
</template>
<script>
// refs的使用参考https://blog.csdn.net/weixin_43090018/article/details/120544804
import { onMounted, reactive, ref } from 'vue'
export default {
setup() {
const guauguaka = ref(null)
const canvas = ref(null)
let isDraw = ref(false)
let ctx = reactive(null)
let ggk = reactive(null)
onMounted(() => {
console.log(guauguaka.value);
ggk = guauguaka.value
ctx = canvas.value.getContext("2d")
ctx.fillStyle = '#999'
ctx.fillRect(0,0,375,150)
ctx.font = '30px 楷体'
ctx.fillStyle = '#FFF'
ctx.fillText('刮刮卡',150,75)
isDraw.value = false
})
const touchstart = () => {
console.log('onMounseDown');
isDraw.value = true
}
const touchmove = e => {
if(isDraw.value) {
console.log('touchmove',e);
let x = e.targetTouches[0].pageX - ggk.offsetLeft
let y = e.targetTouches[0].pageY - ggk.offsetTop
ctx.globalCompositeOperation = 'destination-out'
ctx.arc(x,y,20,0,2*Math.PI)
ctx.fill()
}
}
const touchend = () => {
console.log('onMounseUp');
isDraw.value = false
}
return {
canvas,
guauguaka,
touchstart,
touchend,
touchmove,
ctx
}
}
}
</script>
<style lang="less" scoped>
.awards{
width: 100%;
height: 150px;
border: 1px solid red;
text-align: center;
font-size: 30px;
line-height: 150px;
}
.guaguaka{
position: relative;
#canvas{
position: absolute;
left: 0;
top: 0;
}
}
</style>
版权声明:本文为qq_39933787原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。