实现刮刮卡效果,刮层下面是文字;
<canvas id="canvas_background" width="145px" height="35px"></canvas> <canvas id="score"></canvas> <script type="text/javascript"> (function (bodyStyle) { // 在FF浏览器环境中,通过修改CSS3属性,使子元素中所有的文字都不能选择。 bodyStyle.mozUserSelect = 'none'; // 在Google浏览器环境中,通过修改CSS3属性,使子元素中所有的文字都不能选择。 bodyStyle.webkitUserSelect = 'none'; var canvas_score = document.querySelector('#score'), ctx_score = canvas_score.getContext('2d'); var canvas = document.querySelector('#canvas_background'), ctx = canvas.getContext('2d'); var mousedown = false; var trigger = true; var w = 145, h = 35; //中奖文字信息 var winInfo = "谢谢参与"; ctx_score.font = 'Normal 60px 宋体'; ctx_score.fillStyle = '#000000'; ctx_score.fillText(winInfo, 30, 90); //添加灰色刮层 ctx.fillStyle = 'gray'; ctx.fillRect(0, 0, 145, 35); // 在已有内容和新图形不重叠的地方,已有内容保留,所有其他内容成为透明。 ctx.globalCompositeOperation = 'destination-out'; // 处理“鼠标”或“手指”按下时的动作。 function eventDown(e){ // 通知浏览器不要执行与事件关联的默认动作。 e.preventDefault(); // 得到中奖图片的像素数据(像素计算非常耗费CPU和内存,可能会导致浏览器崩溃)。 var data = ctx.getImageData(0, 10, w, h).data; // 通过计算每一个像素,得知还有多少“遮挡区域”。 for (var i = 0, j = 0; i < data.length; i += 4) { if (data[i] && data[i + 1] && data[i + 2] && data[i + 3]) { j++; } } // 存在遮挡区域时才触发刮奖事件。 if (j <= 0) { trigger = false; } mousedown = true; } // 处理“鼠标”或“手指”按下后移动时的动作。 function eventMove(e){ e.preventDefault(); if (mousedown) { // 如果存在涉及当前事件的手指的一个列表(这里是指正在移动中的手指)。 if (e.changedTouches){ // 取得涉及当前事件中众多手指中的最后一个。 e = e.changedTouches[e.changedTouches.length - 1]; } // 计算当前“鼠标”或“手指”在canvas中的坐标(注意,计算的坐标是canvas里的坐标)。 var x = (e.clientX + document.body.scrollLeft || e.pageX) - canvas.offsetLeft || 0, y = (e.clientY + document.body.scrollTop || e.pageY) - canvas.offsetTop || 0; with (ctx) { beginPath(); arc(x, y, 10, 0, Math.PI * 2); fill(); } } } // 处理“鼠标”或“手指”按下后抬起时的动作。 function eventUp(e){ e.preventDefault(); mousedown = false; if(trigger){ // 得到中奖图片的像素数据(像素计算非常耗费CPU和内存,可能会导致浏览器崩溃)。 var data = ctx.getImageData(0, 10, w, h).data; // 通过计算每一个像素,得知还有多少“遮挡区域”。 for (var i = 0, j = 0; i < data.length; i += 4) { if (data[i] && data[i + 1] && data[i + 2] && data[i + 3]) { j++; } } // 当还只剩下20%的遮挡区域时弹出中奖信息,同时撤掉遮挡区域。 if (j <= w * h * 0.35) { ctx.clearRect(0, 0, w, h); } } } // 监听“触摸的开始、移动与抬起”事件。 canvas.addEventListener('touchstart', eventDown); canvas.addEventListener('touchend', eventUp); canvas.addEventListener('touchmove', eventMove); // 监听“鼠标的开始、移动与抬起”事件。 canvas.addEventListener('mousedown', eventDown); canvas.addEventListener('mouseup', eventUp); canvas.addEventListener('mousemove', eventMove); })(document.body.style); </script>
相关推荐
在刮刮卡效果中,当用户在Canvas上移动鼠标或手指时,我们需要监听`mousedown`、`mousemove`和`mouseup`事件,以实现刮开的效果。 3. **图形状态管理**: `save()`和`restore()`方法用于保存和恢复Canvas的状态。在...
HTML5手机刮刮卡效果是一种基于现代Web技术实现的互动元素,主要应用于移动设备上的网页设计,为用户提供一种类似于实物刮刮卡的游戏体验。这种效果是通过JavaScript、CSS3以及HTML5的新特性来构建的,使得用户可以...
在Android开发中,有时我们需要为应用添加一些独特的交互体验,比如刮刮卡效果。这个刮刮卡效果可以用于各种场景,比如抽奖、解锁隐藏内容等。本教程将介绍如何通过自定义控件来实现这一效果。 首先,我们需要理解...
在Android开发中,实现刮刮卡效果是一种常见的交互设计,常用于抽奖、解锁等功能,给用户带来趣味性。本文将详细讲解如何在Android平台上创建一个刮刮卡效果,包括使用圆形图片的实现。 首先,刮刮卡效果的核心是...
7. **示例资源**:提供的"1704942063332.jpg"可能是一个展示刮刮卡效果的截图,而"Scratch Card 1.6.unitypackage"则是包含插件源代码和资源的包文件。开发者可以通过导入这个包来快速开始使用刮刮卡功能。 总结来...
刮刮卡效果的核心部分就是在Canvas上进行绘制。通过JavaScript,我们可以获取Canvas的2D渲染上下文,并用它来画出刮刮卡的背景、覆盖层以及刮开的效果。 1. **基础刮刮卡实现**: - 使用HTML创建一个Canvas元素,...
本项目旨在帮助开发者学习如何实现这样的界面,并结合刮刮卡效果,为用户提供更具趣味性的交互体验。接下来,我们将详细探讨这两个主要知识点。 一、仿微信界面 1. 主界面布局:微信的主界面通常包括底部导航栏,...
刮刮卡效果是一种常见的互动元素,常见于促销活动或抽奖游戏中,用户通过鼠标或触控操作刮开一层覆盖层,显示隐藏的内容。以下是如何使用HTML5和canvas实现这一效果的步骤: 1. **创建canvas元素**: 首先,在HTML...
移动端刮刮卡效果 使用了canvas,奖品可以自己用 canvas 生成一下。朋友推荐的一个插件写的,挺好用的
在刮刮卡效果中,Canvas是核心元素,用来创建刮刮区域。通过设置Canvas的宽高和位置,可以将它放置在网页的任何地方。 2. **绘图函数**:Canvas API提供了丰富的绘图方法,如`fillRect()`用于填充矩形,`clearRect...