目录
“这一次我要将失去的都拿回来” 结婚十年,最好的闺蜜竟然勾引我老公,我无数次的忍耐换来的却是变本加厉, 点个关注聆听我的复仇计划
精心布局
准备一个canvas元素, 在准备一个显示中奖结果的盒子,让两个元素叠在一起,刮卡的时候,再让ggl盒子里面的内容显示出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#c1 {
position: absolute;
top: 0;
left: 0;
z-index: 10
}
.ggl {
position: absolute;
top: 0;
left: 0;
background: gray;
width: 600px;
height: 400px;
line-height: 400px;
font-size: 50px;
font-weight: 700;
text-align: center;
}
</style>
</head>
<body>
<canvas id="c1" width="600" height="400"></canvas>
<div class="ggl">谢谢惠顾</div>
</body>
</html>
获取canvas元素,并创建图片对象,将卡片渲染出来
<script>
/**
* @type {HTMLCanvasElement}
*/
const c1 = document.querySelector('#c1')
const ggl = document.querySelector('.ggl')
const ctx = c1.getContext('2d')
const img = new Image()
img.src = './ggl.jpg'
img.onload = function () {
ctx.drawImage(img, 0, 0, 600, 400)
}
</script>
执行计划
我们再点击鼠标并且移动时才可以刮刮,通过鼠标对象,创建一个圆,向外辐射,从而模拟刮卡的过程
通过canvas图像合成 globalCompositeOperation 为其设置destination-out, 将背后的中奖结果展示出来
let isDraw = false
c1.onmousedown = function () {
isDraw = true
}
c1.onmouseup = function () {
isDraw = false
}
c1.onmousemove = function (e) {
let x = e.pageX
let y = e.pageY
if (isDraw) {
ctx.globalCompositeOperation = 'destination-out'
ctx.arc(x, y, 30, 0, Math.PI * 2)
ctx.fill()
}
}
通过这样,我们的刮刮乐就制作完毕了。
QQ录屏20230712180427
如果再添点乐趣,可以这样
let random = Math.random()
if (random < 0.2) {
ggl.innerHTML = '恭喜您中了iphone13 Pro'
}