HTML5实现类似刮刮卡的功能

HTML5实现类似刮刮卡的功能

有这样一个功能,当我们使用微信公众号,发送图片时......此处省略300字!

注意要点设置:

1.设置用户缩放:user-scalable=no|yes

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />

2.禁止拖动:

document.ontouchmove = function(e){ e.preventDefault(); }; //文档禁止 touchmove事件

3.禁止弹出选择菜单:
document.documentElement.style.webkitTouchCallout = "none";

具体实现代码:
<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8" />
		<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
		<title>志玲传说</title>
		<style type="text/css">
			body {
				width: 320px;
				min-height: 568px;
				overflow: hidden;
				margin: 0;
			}
			#canvas {
				background: url(img/lzl.jpg);
				/*奖品图片*/
				fixed center center no-repeat;
				background-size: cover;
				width: 320px;
				min-height: 480px;
				overflow: hidden;
				position: relative;
			}
			.before {
				background: none !important;
			}
			#canvas canvas {
				cursor: url("img/bird.png") 0 0, auto;
				/*PC端的手势图片*/
			}
		</style>
	</head>

	<body oncontextmenu="return false;" onselectstart="return false;">
		<div id="canvas">
		</div>
	</body>
	<script type="text/javascript">
		(function() {

			window.onload = function() {
				/**禁止拖动设置*/
				document.ontouchmove = function(e) {
					e.preventDefault();
				};
				
				/**判断浏览器是否支持canvas**/

				try {

					document.createElement('canvas').getContext('2d');

				} catch (e) {

					var addDiv = document.createElement('div');

					alert('您的手机不支持刮刮卡效果哦~!');

				}

			};

			var u = navigator.userAgent,
				mobile = 'PC';

			if (u.indexOf('iPhone') > -1) mobile = 'iphone';

			if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) mobile = 'Android';

			function createCanvas(parent, width, height) {

				var canvas = {};

				canvas.node = document.createElement('canvas');

				canvas.context = canvas.node.getContext('2d');
				//此处可以自己给标签添加
				canvas.node.width = width || 320;

				canvas.node.height = height || 480;
				//给canvas标签添加Id
				canvas.node.id = 'canvasTag';

				parent.appendChild(canvas.node);

				return canvas;

			}

			function init(container, width, height, fillColor, type) {

				var canvas = createCanvas(container, width, height);

				var ctx = canvas.context;

				// define a custom fillCircle method

				ctx.fillCircle = function(x, y, radius, fillColor) {

					this.fillStyle = fillColor;

					this.beginPath();

					this.moveTo(x, y);

					this.arc(x, y, radius, 0, Math.PI * 2, false);

					this.fill();

				};

				ctx.clearTo = function(fillColor) {

					ctx.fillStyle = fillColor;

					ctx.fillRect(0, 0, width, height);

				};

				ctx.clearTo(fillColor || "#ddd");

				canvas.node.addEventListener(mobile == "PC" ? "mousedown" : "touchstart", function(e) {

					canvas.isDrawing = true;

				}, false);

				canvas.node.addEventListener(mobile == "PC" ? "mouseup" : "touchend", function(e) {

					canvas.isDrawing = false;

				}, false);

				canvas.node.addEventListener(mobile == "PC" ? "mousemove" : "touchmove", function(e) {

					if (!canvas.isDrawing) {

						return;

					}

					if (type == 'Android') {

						var x = e.changedTouches[0].pageX - this.offsetLeft;

						var y = e.changedTouches[0].pageY - this.offsetTop;

					} else {

						var x = e.pageX - this.offsetLeft;

						var y = e.pageY - this.offsetTop;

					}

					var radius = 20;

					var fillColor = '#ff0000';

					ctx.globalCompositeOperation = 'destination-out';

					ctx.fillCircle(x, y, radius, fillColor);

				}, false);

			}

			var container = document.getElementById('canvas');

			init(container, 320, 568, '#696868', mobile);

		})();
	</script>

</html>

预览效果图:

图片素材:








郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。