<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.container {
width: 400px;
height: 200px;
border: 1px dotted red;
margin: 100px auto;
}
</style>
</head>
<body>
<div class="container">
<canvas id="c"></canvas>
</div>
<script>
var cv = document.getElementById("c");
var ctx = cv.getContext("2d"); cv.width = 400;
cv.height = 200; // 奖品设置
var prizesArr = [
{name: "iPhone7 亮黑版", color: "rgba(0, 0, 0, 1)"},
{name: "iPhone7 黑色版", color: "rgba(0, 0, 0, .6)"},
{name: "iPhone7 安卓版", color: "rgba(0, 255, 0, 1)"},
{name: "iPhone7 塞班版", color: "rgba(255, 0, 0, 1)"}
]; // 随机获取到一个奖品
var prizeObj = prizesArr[ Math.floor(Math.random() * 4) ]; // 思路:
// 1 先将文字绘制到画布中
// 2 将画布转化为 Base64 格式的图片
// 3 将图片设置为canvas的背景图片
// 4 给canvas画布填充灰色的矩形
// 5 绑定鼠标事件 // 1 设置文字的坐标
var x0 = cv.width / 2, y0 = cv.height / 2;
ctx.textAlign = "center";
ctx.textBaseLine = "middle";
ctx.font = "30px 微软雅黑";
ctx.fillStyle = prizeObj.color;
ctx.fillText(prizeObj.name, x0, y0); // 2 将画布转化为图片
var img = cv.toDataURL("image/jpg", 1);
// 3 将图片设置为canvas的背景图片
cv.style.backgroundImage = "url(" + img + ")"; // 4 给canvas画布填充灰色的矩形
ctx.fillStyle = "silver";
ctx.fillRect(0, 0, cv.width, cv.height); //
// 判断是否点击了 canvas
var isStart = false;
var radius = 10;
cv.onmousedown = function() {
isStart = true;
};
cv.onmouseup = function() {
isStart = false;
// 默认值
ctx.globalCompositeOperation = 'source-over';
}; cv.onmousemove = function(e) {
// 原有内容中与新图形不重叠的部分会被保留, 重叠的部分,没有了
ctx.globalCompositeOperation = "destination-out"; if(isStart) { // 如果开关是 true ,才执行擦出效果
ctx.beginPath();
// ctx.arc()
var x = e.clientX - cv.offsetLeft;
var y = e.clientY - cv.offsetTop; // ctx.fillStyle = "rgba(0, 0, 0, 1)";
ctx.arc(x, y, radius, 0, Math.PI * 2);
ctx.fill();
}
};
</script>
</body>
</html>

canvas制作刮刮乐案例的更多相关文章

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

    分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body> ![](img/gailun.jpg) &l ...

  2. 游戏的套路你知道吗? H5 Canvas刮刮乐

    玩游戏的人 很多时候都会遇到翻牌子  开宝箱. 总有人傻傻的在哪里还纠结很久到底点哪一个! 纠结  指不定翻哪一个会多一点,你明明看到那个卡片的奖项多 . 那我就告诉你好了  其实很多时候在你点开那个 ...

  3. H5 Canvas刮刮乐

    玩游戏的人 很多时候都会遇到翻牌子  开宝箱. 总有人傻傻的在哪里还纠结很久到底点哪一个! 纠结  指不定翻哪一个会多一点,你明明看到那个卡片的奖项多 . 那我就告诉你好了  其实很多时候在你点开那个 ...

  4. canvas刮刮乐

    这周有点迷茫,不知道干嘛了,一天天就过去了!我在博客右侧公告栏加了qq交流,各位有好的主题,或者有趣的技术,欢迎交流!今天突发奇想,就写了2个h5 canvas的demo玩玩! demo一:刮刮乐 舍 ...

  5. 【Android界面实现】使用Canvas对象实现“刮刮乐”效果

    在淘宝.京东等电商举办活动的时候,常常能够看到在移动client推出的各种刮奖活动,而这样的活动也受到了非常多人的喜爱.从client的体验来说,这样的效果应该是通过网页来实现的,那么,我们使用And ...

  6. HTML5 CSS3 诱人的实例 :canvas 模拟实现电子彩票刮刮乐

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34089553 今天给大家带来一个刮刮乐的小例子~基于HTML5 canvas的, ...

  7. canvas刮刮乐游戏等

    裁剪 ctx.clip():当前路径外的区域不再绘制 <canvas id="cans" width=500 height=500></canvas> &l ...

  8. canvas 写一个刮刮乐抽奖

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 赵雅智_Android案例_刮刮乐

    实现效果 主要代码 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  10. canvas之刮刮乐

    效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

随机推荐

  1. 异常及String

    异常时描述错误信息的对象,在编码过程中我们会遇到很多异常 例如: 1.java.lang.ArithmeticException 算数异常.算数运算出现错误时抛出 比如用0做除数 2.java.lan ...

  2. 使用PCL::GPU::遇到问题

    一:使用GPU进行点云分割,理论上可以极大地加快分割速度: 于是对PCL1.7.1进行了编译,回到32位系统,重设QT,编译成功(时间好漫长,一定要配置仔细,否则编译一次又一次浪费更多时间): 使用时 ...

  3. luogu p3918[国家集训队]特技飞行 贪心

    开始没看出来是贪心,一度以为是动态规划,还是太弱了呀-.. 不难分析出,两个相同的飞行动作之间夹一个相同的动作是多余的,所以就贪心一下,按Ci从大到小排序,依次加到左右两端点,知道加不了为止. 代码: ...

  4. php多维数组的指定单个字段排序

    多维数组如何根据指定键值?比如现在有数组结构如下: ,,,,,'subject' => 'math'), 1 => array('name' => '3班','avgScore'=& ...

  5. Project Euler 18 Maximum path sum I( DP and 记忆化搜索 )

    题意:求从三角形顶端出发到达底部,所能够得到的最大路径和 方法一:记忆化搜索 /************************************************************ ...

  6. [Ynoi2019模拟赛]Yuno loves sqrt technology II

    题目大意: 给定一个长为\(n\)的序列,\(m\)次询问,每次查询一个区间的逆序对数. 32MB. 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 二次离线莫队. 对于每个区 ...

  7. 【Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) B】Weakened Common Divisor

    [链接] 我是链接,点我呀:) [题意] 给你n个数对(ai,bi). 让你求一个大于1的数字x 使得对于任意的i x|a[i] 或者 x|b[i] [题解] 求出第一个数对的两个数他们有哪些质因子. ...

  8. Profile 动态切换环境

    一.多 Profile 文件我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用 application.properties 的 ...

  9. 全球级的分布式数据库 Google Spanner原理

    开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>    Google Spanner简介 Spanner 是Google的全球级的分布式数据库 (Globally-Di ...

  10. codevs——T1576 最长严格上升子序列

    http://codevs.cn/problem/1576/  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...