刮刮卡涂抹效果,可设置百分比,擦除效果,支持pc,手机端支持不好 2020草莓季升磅
body { margin: 0; } figcaption{ font-family: "Microsoft YaHei","宋体","Segoe UI", "Lucida Grande", Helvetica, Arial,sans-serif; } #bridge { display: block; margin: 0 auto; background-image: url("../img/scratch-2.jpg"); background-image: -webkit-image-set(url("../img/scratch-2.jpg") 1x, url("../img/scratch-2x.jpg") 2x); background-size: cover; width: 100%; max-width: 750px; height: auto; cursor: crosshair; cursor: url(../img/circular-cursor.png) 53 53, crosshair; } #bridgeContainer { text-align: center; font-family: Avenir, sans-serif; } #bridgeContainer figcaption { margin-top: 2rem; }
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>支持移动手机的HTML5 Canvas刮刮卡特效|DEMO_jQuery之家-自由分享jQuery、html5、css3的插件库</title> <link rel="stylesheet" type="text/css" href="css/normalize.css" /> <link rel="stylesheet" type="text/css" href="css/htmleaf-demo.css"> <link rel="stylesheet" href="css/style.css"> <!--[if IE]> <script src="http://libs.useso.com/js/html5shiv/3.7/html5shiv.min.js"></script> <![endif]--> <script type="text/javascript" src="jquery-1.6.4.min.js"></script> </head> <body> <div> <figure id="bridgeContainer" style="margin-top: 50px;"> <figcaption>建议在服务器环境下使用,否则会提示:Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.</figcaption> <canvas id="bridge" width="750" height="465"></canvas> <figcaption>呱呱中大奖!(使用鼠标或移动手机中手指滑动来刮奖)</figcaption> </figure> </div> <script type="text/javascript"> var bridge = document.getElementById("bridge"), bridgeCanvas = bridge.getContext('2d'), brushRadius = (bridge.width / 100) * 5, img = new Image(); console.log(brushRadius); /*if (brushRadius < 50) { brushRadius = 50 }*/ img.onload = function(){ bridgeCanvas.drawImage(img, 0, 0, bridge.width, bridge.height); } img.loc = 'img/'; img.filename = 'scratch-1.jpg'; if (window.devicePixelRatio >= 2) { var nameParts = img.filename.split('.'); img.src = img.loc + nameParts[0]+"-2x"+"."+nameParts[1]; } else { img.src = img.loc + img.filename; } function detectLeftButton(event) { if ('buttons' in event) { return event.buttons === 1; } else if ('which' in event) { return event.which === 1; } else { return event.button === 1; } } function getBrushPos(xRef, yRef) { var bridgeRect = bridge.getBoundingClientRect(); return { x: Math.floor((xRef-bridgeRect.left)/(bridgeRect.right-bridgeRect.left)*bridge.width), y: Math.floor((yRef-bridgeRect.top)/(bridgeRect.bottom-bridgeRect.top)*bridge.height) }; } function drawDot(mouseX,mouseY){ bridgeCanvas.beginPath(); bridgeCanvas.arc(mouseX, mouseY, brushRadius, 0, 2*Math.PI, true); bridgeCanvas.fillStyle = '#000'; bridgeCanvas.globalCompositeOperation = "destination-out"; bridgeCanvas.fill(); /*执行函数*/ percent = getPercent(); console.log(percent); callback(function () { $("#bridge").fadeOut(100); }); } var percent=null; var percented = 30; /*画的比例*/ /*补充函数*/ function getPercent() { var percent; var counter = 0; /*number of pixels clear*/ var imageData = bridgeCanvas.getImageData(0, 0, bridge.width, bridge.height); var imageDataLength = imageData.data.length; for(var i = 0; i < imageDataLength; i += 4) { if (imageData.data[i] === 0 && imageData.data[i+1] === 0 && imageData.data[i+2] === 0 && imageData.data[i+3] === 0) { counter++; } } if (counter >= 1) { percent = (counter / (bridge.width * bridge.height)) * 100; } else { percent = 0; } return percent; } function callback(callback) { if (callback != null && percent >= percented) { callback(); } }; bridge.addEventListener("mousemove", function(e) { var brushPos = getBrushPos(e.clientX, e.clientY); var leftBut = detectLeftButton(e); if (leftBut == 1) { drawDot(brushPos.x, brushPos.y); } }, false); bridge.addEventListener("touchmove", function(e) { e.preventDefault(); var touch = e.targetTouches[0]; if (touch) { var brushPos = getBrushPos(touch.pageX, touch.pageY); drawDot(brushPos.x, brushPos.y); } }, false); </script> </body> </html>
原地址:http://www.htmleaf.com/html5/html5-canvas/201608133862.html
给心灵一个纯净空间,让思想,情感,飞扬!

浙公网安备 33010602011771号