基于HTML5 Canvas技术实现的擦除、刮刮卡效果,轻轻刮去图层就可以模拟真实的效果。
原理:利用画布Canvas及其它自身API,在Canvas元素上绘制一个灰色蒙层,然后通过监听用户鼠标移到或手势来绘制一个透明的图形,这样就能看到Canvas背景下的真实图片(或背景图),即达到擦除效果。
HTML:(注意canvas元素是HTML5才有的元素,运行在支持HTML5的现代浏览器上) <canvas></canvas>
Javascript: -- 1、禁用页面的鼠标选中拖动(不选中)的事件
var bodyStyle = document.body.style; bodyStyle.mozUserSelect = ‘none‘; bodyStyle.webkitUserSelect = ‘none‘;
-- 2、定义图片类,获取canvas元素,并设置背景和位置属性
var img = new Image(); var canvas = document.querySelector(‘canvas‘); canvas.style.backgroundColor = ‘transparent‘; canvas.style.position = ‘absolute‘; img.src = ‘img/img.png‘;
-- 3、检测到图片加载完时,定义一些属性和函数,
( layer():绘制一个灰色的正方形 eventDown():按下事件, eventUp():松开事件, eventMove():移动事件, arc(x, y, 10, 0, Math.PI * 2):绘制小圆点 )
img.addEventListener(‘load‘, function(e) { // 我的理解:在确保canvas画布后的图片或背景图加载完成后,才可进行擦除行为。 var ctx; var w = img.width, h = img.height; var offsetX = canvas.offsetLeft, offsetY = canvas.offsetTop; var mousedown = false; function layer(ctx) { ctx.fillStyle = ‘gray‘; ctx.fillRect(0, 0, w, h); } function eventDown(e) { e.preventDefault(); mousedown = true; } function eventUp(e) { e.preventDefault(); mousedown = false; } function eventMove(e) { e.preventDefault(); if(mousedown) { if(e.changedTouches){ e = e.changedTouches[e.changedTouches.length-1]; } var x = (e.clientX + document.body.scrollLeft || e.pageX) - offsetX || 0, y = (e.clientY + document.body.scrollTop || e.pageY) - offsetY || 0; // 鼠标按下或移动时的,坐标位置 with(ctx) { beginPath() arc(x, y, 10, 0, Math.PI * 2); // 绘制圆点 -- (10:为圆点大小) fill(); } } } // 监听事件...});
-- 4、canvas通过调用以上函数,绘制图形,并且监听触控及鼠标事件
canvas.width = w; canvas.height = h; canvas.style.backgroundImage = ‘url(‘ + img.src + ‘)‘; ctx = canvas.getContext(‘2d‘); ctx.fillStyle = ‘transparent‘; ctx.fillRect(0, 0, w, h); // 绘制矩形layer(ctx); // 绘制函数
ctx.globalCompositeOperation = ‘destination-out‘; canvas.addEventListener(‘touchstart‘, eventDown); canvas.addEventListener(‘touchend‘, eventUp); canvas.addEventListener(‘touchmove‘, eventMove); canvas.addEventListener(‘mousedown‘, eventDown); canvas.addEventListener(‘mouseup‘, eventUp); canvas.addEventListener(‘mousemove‘, eventMove);
水平有限,文中错误不妥在所难免,欢迎批评指正建议评论。文章将不定期修改完善。谢谢!
canvas 相关博文:
时间: 2024-11-05 14:41:23