刮刮乐效果

查看DEMO

html:

<canvas></canvas>

javascript部分:

function imageClip(filter){

    var canvas = document.querySelector(‘canvas‘),
        context = canvas.getContext(‘2d‘),
        img = new Image(), // 图片对象
        finish; // 执行成功函数

    img.src = ‘http://www.jcore.cn/resources/images/2014/09/20/html5-series-clip-pic-0.png‘; // 设置图片
    img.onload = function(e) // 加载图片完成
    {
        var imgw = img.width,  // 图片宽
            imgh = img.height, // 图片高
            offsetX = canvas.offsetLeft, // 距离左边位置
            offsetY = canvas.offsetTop, //  距离上边位置
            mousedown = false; // 是否点击

        // 设置 canvas 宽、高、背景
        canvas.width  = imgw;
        canvas.height = imgh;
        canvas.style.backgroundImage = ‘url(‘+img.src+‘)‘;

        // 设置模糊 颜色、透明度
        context.fillStyle = ‘gray‘;
        context.globalAlpha = 0.6;

        // 绘制图片
        context.fillRect(0,0,imgw,imgh);

        // 模糊层绘制到 canvas 上
        context.globalCompositeOperation = ‘destination-out‘;

        // 按下鼠标事件
        function eventDown(e){
            e.preventDefault(); // 阻止冒泡
            mousedown = true; // 设置为点击事件
        }

        // 抬起鼠标事件
        function eventUp(e){
            e.preventDefault(); // 阻止冒泡
            mousedown = false; // 设置为是否鼠标点击事件
            clearMask(); // 清空模糊层
        }

        // 清空模糊层函数
        function clearMask(){
            var num = 0, // 计数器
                datas = context.getImageData(0,0,imgw,imgh), // 噪点对象
                datasLength = datas.data.length; // 噪点数量
            for (var i = 0; i < datasLength; i++) {
                if (datas.data[i] == 0) num++; // 为0则已经清空,计数器++
            }
            if (num >= datasLength * filter) { // 噪点清空数量大于当前百分比
                if(finish) finish(); // 执行成功函数
            };
        }

        // 移动鼠标事件
        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, // X轴坐标
                    y = (e.clientY + document.body.scrollTop  || e.pageY) - offsetY || 0; // Y轴坐标

                // 清空模糊层
                context.beginPath();
                context.arc(x, y, 30, 0, Math.PI * 2); // 画圆
                context.fill();
            }
        }

        // 绑定手机事件
        canvas.addEventListener(‘touchstart‘, eventDown);
        canvas.addEventListener(‘touchend‘, eventUp);
        canvas.addEventListener(‘touchmove‘, eventMove);
        // 绑定浏览器事件
        canvas.addEventListener(‘mousedown‘, eventDown);
        canvas.addEventListener(‘mouseup‘, eventUp);
        canvas.addEventListener(‘mousemove‘, eventMove);
    };

    this.finish = function(callback){
        finish = callback;
    }

}

调用方法:

var clip = new imageClip(0.1);
clip.finish(function(){
  alert("clip success...");
});
时间: 2024-09-20 15:41:36

刮刮乐效果的相关文章

使用Canvas对象实现“刮刮乐”效果

在淘宝.京东等电商举办活动的时候,经常可以看到在移动客户端推出的各种刮奖活动,而这种活动也受到了很多人的喜爱.从客户端的体验来说,这种效果应该是通过网页来实现的,那么,我们使用Android的自带控件能不能实现这种刮刮乐的效果呢?当然可以,本篇文章将介绍使用Canvas这个对象,如何实现"刮刮乐"的效果. 先看效果图 下面我们看一下如何使用代码实现 布局文件 <FrameLayout xmlns:android="http://schemas.android.com/a

[cocos2d-js]cc.RenderTexture几种用法(数字图片、刮刮乐效果)

[转]http://blog.csdn.net/realcrazysun1/article/details/42393629 本文基于cocos2d-js 3.0版本引擎开发 RenderTexture用法1:数字图片 通过这张图片实现任意数字 //数字图片精灵 var PictureNumber = cc.Sprite.extend({ m_Number:null, m_NumberTexture:null, ctor:function(){ this._super(); }, buildNu

HTML5 简单实现刮刮乐效果

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

Android实现刮刮乐效果

前几个月刚接触Android的时候做了一个小项目,其中也用到了类似刮刮乐的效果,现在把代码贴出来 首先要做一个类似橡皮擦的东西吧,然后才能把纸上的笔迹擦除 /** * FileName: SplashActivity.java * * @desc 橡皮擦功能,类似刮刮乐效果 * @author HTP * @Date 20140311 * @version 1.00 */ public class Text_Rubbler extends TextView { private float TOU

刮刮乐实现效果

当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画布的属性,比如,画布的颜色.尺寸等.下面来分析Android中Canvas有哪些功能,Canvas提供了如下一些方法: Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布. Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,则将内

实现刮刮乐的效果

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } </style> </head> <body> <div id="box">

20行js代码制作网页刮刮乐

分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body> ![](img/gailun.jpg) <canvas id="canvas" width="400" height="300"></canvas> </body> 没什么要特别注意的为了效果加了些CSS样式 CSS部分 <style type=&qu

Android 撕衣服(刮刮乐游戏)

项目简介: 该项目为撕衣服,类似刮刮乐游戏 详细介绍: 用户启动项目后,加载一张图片,当用户点击图片的时候,点击的一片区域就会消失,从而显示出在这张图片下面的图片 这个小游戏类似与刮奖一样,刮开涂层就会显示文字. 这里则是撕掉美女身上的衣服,漏出里面的图片. 该应用涉及到的知识有: 1.如何实现画图功能 2.如何把像素点变为透明色 3.如何监听手机对屏幕的操作 主要有触击,滑动,离开三种情况 注意: 1.一定要注意在设置像素点的时候,范围不能超过当前控件的范围 2.设置ImageView最好设置

【微信公众平台开发】微信刮刮乐,解决三星兼容性问题

刮刮乐jquery插件:wScratchPad 完整项目资源下载:点击打开链接 运用wScratchPad插件很快弄出刮刮乐的效果,代码如下: <!DOCTYPE html> <html> <head> <meta CHARSET="UTF-8"> <title>刮刮乐</title> <script type="text/javascript" src="./inc/jquer

自己定义控件-画板,橡皮擦,刮刮乐

画板效果图 页面代码 public class ActionerView extends View { private Paint mPaint = new Paint(); private Path mPath = new Path();//手指滑动路径 private Canvas mCanvas;//缓存画布 private Bitmap mBitmap;//缓存图片 private float pointX, pointY;//触点坐标 public ActionerView(Conte