<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style>
body {
height: 1000px;
}
</style> </head>
<body>
<div style="position: relative; width: 300px; height: 100px;">
<canvas id="rect" width="300" height="100" style="position:absolute;left:0;top:0;"></canvas>
<canvas id="arc" width="300" height="100" style="position:absolute;left:0;top:0;"></canvas>
</div>
<script type="text/javascript">
function WipeImg(rect, arc) {
var canvas = document.getElementById(rect);
var context = canvas.getContext("2d");
var img = new Image();
img.onload = function () {
context.drawImage(this, 0, 0, canvas.width, canvas.height);//将图片放置画布上
}
img.src = '../js_面向对象/image/bdlogo.gif';//图片地址
var canvas2 = document.getElementById(arc);
var context2 = canvas2.getContext("2d");
context2.fillStyle = "#ccc";
context2.fillRect(0, 0, 300, 100);
context2.fill();
context2.globalCompositeOperation = "destination-out";//源图像是透明的,目标图像部分被显示出来
var isMousedown = false;
canvas2.addEventListener("mousedown", function (e) {
isMousedown = true;
var docEle = document.documentElement;
var x = (e.clientX) ;+ docEle.scrollLeft - docEle.clientLeft;
var y = (e.clientY) + docEle.scrollTop - docEle.clientTop;
//可以利用createRadialGradient给定指定值去画渐变效果
//var radgrad = context2.createRadialGradient(x, y, 0, x, y, 30);
//radgrad.addColorStop(0, 'rgba(0,0,0,0.6)');
//radgrad.addColorStop(1, 'rgba(255,255,255,0)');
//context2.fillStyle = radgrad;
context2.fillStyle = "#fff";
context2.beginPath();
context2.arc(x, y, 30, 0, Math.PI * 2, true);
context2.closePath();
context2.fill();
canvas2.addEventListener("mousemove", function (e) {
if (!isMousedown) return false;
var docEle = document.documentElement;
var x = (e.clientX) + docEle.scrollLeft - docEle.clientLeft;
var y = (e.clientY) + docEle.scrollTop - docEle.clientTop;
var radgrad = context2.createRadialGradient(x, y, 0, x, y, 30);
radgrad.addColorStop(0, 'rgba(0,0,0,0.6)');
radgrad.addColorStop(1, 'rgba(255,255,255,0)');
context2.fillStyle = radgrad;
context2.beginPath();
context2.arc(x, y, 30, 0, Math.PI * 2, true);
context2.closePath();
context2.fill();
}, false);
canvas2.addEventListener("mouseup", function (e) {
isMousedown = false;
}, false);
}, false);
}
WipeImg("rect", "arc");
</script>
</body>
</html>

  

canvas 利用canvas中的globalCompositeOperation 绘制刮奖 效果的更多相关文章

  1. HTML5实现刮奖效果

    原文:HTML5实现刮奖效果 要实现刮奖效果,最重要的是要找到一种方法:当刮开上层的涂层是就能看到下层的结果.而HTML5的canvas API中有一个属性globalCompositeOperati ...

  2. HTML5 Canvas实战之刮奖效果

    近年来由于移动设备对HTML5的较好支持,经常有活动用刮奖的效果,最近也在看H5方面的内容,就自己实现了一个,现分享出来跟大家交流. 1.效果 2.原理 原理很简单,就是在刮奖区添加两个canvas, ...

  3. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  4. 使用MDScratchImageView实现刮奖效果

    使用MDScratchImageView实现刮奖效果 https://github.com/moqod/iOS-Scratch-n-See 最终效果: 其实这是使用了别人的东西而已:) 源码: // ...

  5. canvas写的一个刮奖效果

    <!DOCTYPE html><head> <meta charset="utf-8"> <meta http-equiv="X ...

  6. [canvas]利用canvas绘制自适应的折线图

    前段时间学习了用canvas绘制折现图,且当画布变换大小,折现图会随之变化,现附上代码 <!DOCTYPE html> <html lang="en"> & ...

  7. HTML5 Canvas实战之刮奖效果【转】

    开源项目地址:https://github.com/artwl/Lottery 作者博客地址:http://www.cnblogs.com/jscode/p/3580878.html 谢谢浏览!

  8. 使用PorterDuffXfermode画出刮刮奖效果p146-p148

    package com.zzw.Qunyinzghuan3; import android.content.Context; import android.graphics.Bitmap; impor ...

  9. canvas 绘制刮刮卡

    思路=> 用div来展示刮奖结果,用canvas绘制刮奖前展示的图片或者文字:将canvas叠在div上方,刮奖是只需要操作canvas配合touch事件即可简单完成. canvas刮奖可以用g ...

随机推荐

  1. (九)串行口方式0 拓展并行输入端口 74LS165 芯片

    74LS165芯片讲解: 外接一个同步移位寄存器 74LS165芯片,拓展一个 8 位 并行输入端口的电路, 可将接在74LS165芯片的8个开关 S0——S7 的状态 通过 串行口方式 0 读到 单 ...

  2. Linux下执行的java命令重定向到文件中的方法

    在Linux下通常会执行如:java -version 的命令, 但是,命令只是打印到了屏幕上不能重定向到文件中或标准输出流中. 此时需要将错误输出流重定向到标准输出流中就可以得到了. 比如:java ...

  3. String.format中大括号的加入方法

    因为相对于string Builder  自己更喜欢 string.format 的形式拼接字符串。 今天在写代码的时候怎么都报错,弄的我很奇怪 最后发现问题出在字符串中出现大括号“{”的问题,我想这 ...

  4. flexigrid扩展(添加全选,格式化表单)

    1.关于flexigrid的属性这里不多说,百度一大把. 这里主要说一个参数process process参数:编写对某一列进行自定义处理的函数 function 方法名(tddiv,pid){}// ...

  5. SQL复制一个表的数据到另一个表

    最近做一个项目,由于客户数据量大,为了不将数据彻底删除,于是将数据移动到历史表,原始表的数据删除.由于技术有限,想不到好的方法,于是写个存储过程 执行,为了防止执行过程中出现异常,执行不完整.用到hI ...

  6. Azure Table storage 之改进DynamicTableEntity类为其添加动态语言扩展

    在之前的一篇文章中提到,storage类库中包含一个可以用来动态获取Azure table storage 表结构的类-DynamicTableEntity. 我们可以通过这个类,我们无需为每一个表提 ...

  7. JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...

  8. RecyclerView使用总结

    遇到的异常: java.lang.ExceptionInInitializerError静态块初始化异常 NetworkOnMainThreadException访问网线不能在主线程中进行 我的参考资 ...

  9. 2016年12月21日 星期三 --出埃及记 Exodus 21:16

    2016年12月21日 星期三 --出埃及记 Exodus 21:16 "Anyone who kidnaps another and either sells him or still h ...

  10. SpringMvc xml 配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...