`
chenjie1121
  • 浏览: 13083 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

刮刮卡效果

 
阅读更多

实现刮刮卡效果,刮层下面是文字;

 

<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>

 

分享到:
评论

相关推荐

    html5 刮刮卡效果

    在刮刮卡效果中,当用户在Canvas上移动鼠标或手指时,我们需要监听`mousedown`、`mousemove`和`mouseup`事件,以实现刮开的效果。 3. **图形状态管理**: `save()`和`restore()`方法用于保存和恢复Canvas的状态。在...

    html5手机刮刮卡效果_手指滑动刮刮卡特效

    HTML5手机刮刮卡效果是一种基于现代Web技术实现的互动元素,主要应用于移动设备上的网页设计,为用户提供一种类似于实物刮刮卡的游戏体验。这种效果是通过JavaScript、CSS3以及HTML5的新特性来构建的,使得用户可以...

    Android 刮刮卡效果 自定义控件实现

    在Android开发中,有时我们需要为应用添加一些独特的交互体验,比如刮刮卡效果。这个刮刮卡效果可以用于各种场景,比如抽奖、解锁隐藏内容等。本教程将介绍如何通过自定义控件来实现这一效果。 首先,我们需要理解...

    android刮刮卡效果实现

    在Android开发中,实现刮刮卡效果是一种常见的交互设计,常用于抽奖、解锁等功能,给用户带来趣味性。本文将详细讲解如何在Android平台上创建一个刮刮卡效果,包括使用圆形图片的实现。 首先,刮刮卡效果的核心是...

    Unity插件 实现 刮刮卡/刮刮乐 效果

    7. **示例资源**:提供的"1704942063332.jpg"可能是一个展示刮刮卡效果的截图,而"Scratch Card 1.6.unitypackage"则是包含插件源代码和资源的包文件。开发者可以通过导入这个包来快速开始使用刮刮卡功能。 总结来...

    2种使用html5实现刮刮卡效果

    刮刮卡效果的核心部分就是在Canvas上进行绘制。通过JavaScript,我们可以获取Canvas的2D渲染上下文,并用它来画出刮刮卡的背景、覆盖层以及刮开的效果。 1. **基础刮刮卡实现**: - 使用HTML创建一个Canvas元素,...

    android仿微信界面+刮刮卡效果

    本项目旨在帮助开发者学习如何实现这样的界面,并结合刮刮卡效果,为用户提供更具趣味性的交互体验。接下来,我们将详细探讨这两个主要知识点。 一、仿微信界面 1. 主界面布局:微信的主界面通常包括底部导航栏,...

    HTML5实现刮刮卡效果

    刮刮卡效果是一种常见的互动元素,常见于促销活动或抽奖游戏中,用户通过鼠标或触控操作刮开一层覆盖层,显示隐藏的内容。以下是如何使用HTML5和canvas实现这一效果的步骤: 1. **创建canvas元素**: 首先,在HTML...

    移动端H5刮刮卡效果

    移动端刮刮卡效果 使用了canvas,奖品可以自己用 canvas 生成一下。朋友推荐的一个插件写的,挺好用的

    html5刮刮卡效果

    在刮刮卡效果中,Canvas是核心元素,用来创建刮刮区域。通过设置Canvas的宽高和位置,可以将它放置在网页的任何地方。 2. **绘图函数**:Canvas API提供了丰富的绘图方法,如`fillRect()`用于填充矩形,`clearRect...

Global site tag (gtag.js) - Google Analytics