精心布局
准备一个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' }