canvas 擦除、刮刮卡效果

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

canvas 擦除、刮刮卡效果的相关文章

基于HTML5 canvas的jQuery刮刮卡效果

ScratchIt是一款基于HTML5 canvas的jQuery刮刮卡效果插件.这个刮刮卡效果使用两张图片和canvas来制作,可以使用鼠标擦除上面的图片,将下面的图片显露出来,模拟现实的刮刮卡效果. 效果演示:http://www.htmleaf.com/Demo/201506071985.html 下载地址:http://www.htmleaf.com/html5/html5-canvas/201506071984.html

canvas实现移动端和PC端刮刮卡效果

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"

css3 canvas之刮刮卡效果

今天我有时间学习了一下html5新增的这个标签canvas,以前虽然经常写html5网页,可是都没用过这个标签.最近刚弄了一个h5微信送祝福的网页,差不多折腾了一个星期,所以我觉得我得系统的来学习一下html5和css3了. 好了,废话不多说,下面贴出我的代码. 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <ti

canvas实现刮刮卡效果

canvas实现刮刮卡效果 实现步骤: 设置页面背景图,即刮刮卡底部图片 绘制canvas 刮刮卡顶部图片drawImage 绑定事件 addEventListener  touchstart.touchmove 完整代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content=&q

canvas擦拭效果-刮刮卡

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>刮刮卡</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalab

Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

很久以前也过一个html5的刮刮卡效果~~上次看到有人写Android的刮刮卡效果~~于是乎产生了本篇博客~~此类例子也比较多了,大家可以百度看看~不过还是通过本例子,带大家发掘一下,里面隐含的知识~ 1.Xfermode以及PorterDuff 如果大家还记得,曾经在博客:完美实现图片圆角和圆形 简单介绍过圆角的实现原理也是基于这个. 首先我们看一下官方的例子,很好的展示了16种Mode的效果: 注:先绘制的Dst,再绘制的Src. 好了,看了这个图,我来问大家几个问题: 问题1.如果我想实现

Android 自己定义控件实现刮刮卡效果 真的就仅仅是刮刮卡么

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 非常久以前也过一个html5的刮刮卡效果~~上次看到有人写Android的刮刮卡效果~~于是乎产生了本篇博客~~此类样例也比較多了,大家能够百度看看~只是还是通过本样例,带大家发掘一下.里面隐含的知识~ 1.Xfermode以及PorterDuff 假设大家还记得,以前在博客:完美实现图片圆角和圆形 简介过圆角的实现原理也是基于这个

Android 刮刮卡实现效果

实现刮刮卡我们可以Get到哪些技能? * 圆形圆角图片的实现原理 * 双缓冲技术绘图 * Bitmap获取像素值数据 * 获取绘制文本的长宽 * 自定义View的掌握 * 获取屏幕密度 * TypeValue.applyDemension * Canvas的一些绘制方法 * Paint的一些常用的属性 * Path的一些方法 刮刮卡的实现原理图 这里用到了13中模式中的DstOut这种模式. 对于这幅图而言,首先绘制Dst,设置xfermode,再绘制Src. 刮刮卡的实现原理步骤 1.绘制显示

PorterDuffXfermode 实现刮刮卡效果

今天闲来无事做,就想着巩固一下 PorterDuffXfermode 的使用吧,先是做了圆形和圆角矩形头像效果,然后就做了个刮刮卡效果.如下图所示 当然 PorterDuffXfermode 的详细使用在这里我就不在强调了,可以去 Google 一下,下面主要来介绍一下效果的实现原理. 其实这个效果十分的简单,主要就是 PorterDuffXfermode 模式的设置和 Paint 的属性设置,下面来看看核心代码 mBitmap = BitmapFactory.decodeResource(ge