canvas实现刮刮卡效果


Posted in Javascript onMarch 14, 2017

目前在html5和css3的热潮下,html页面的效果也是层出不穷,下面我们来介绍使用canvas来模仿刮奖刮开效果。

原理

在需要刮出的图片或者文字上方盖上一层灰色或者其他背景的canvas画布,当手指或者鼠标点击画布并移动时,将画布上移动过的轨迹变成透明即可。

分析

demo中在class为content的div上盖上一层灰色的画布,然后通过获取鼠标和手指的坐标计算出在画布位置上的坐标,通过在坐标原点位置画一个半径10px的透明圆形来透过画布,显示出画布下的内容。本demo是用时需要改变的内容为_width,_height,touchTop,touchLeft这几个参数,根据自身画布的位置自行计算即可。由于是长按事件,记得在移动端阻止浏览器默认功能。

效果图:

canvas实现刮刮卡效果

图(1)初始图

canvas实现刮刮卡效果

图(2)刮开效果

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />
<style>
.content,.cover{width:400px; height:400px; position:absolute; left:50%; top:50%; margin:-200px 0 0 -200px;}
.content{ font-size:48px; line-height:400px; text-align:center;}
h3{ text-align:center; line-height:200px;}
</style>
</head>
<body>
 <h3>快来刮开!!!</h3>
 <div class="content" >中奖啦~!</div>
 <canvas id="cover" class="cover" width="400" height="400"></canvas>
</body>
<script>
var isdown = false,
 cover = document.getElementById("cover"),
 covercanvas = cover.getContext("2d");
 //
 covercanvas.fillStyle="transparent";
 covercanvas.fillRect(0,0,400,400);
 function fillter( canvas ){
 canvas.fillStyle="#ccc";
 canvas.fillRect(0,0,400,400);
 }
 function isDown(e){
 e.preventDefault();
 isdown=true; 
 }
 function isUp(e){
 isdown=false; 
 }
 function draw( e ){
 e.preventDefault();
 if(isdown){
 if(e.changedTouches){
  e=e.changedTouches[e.changedTouches.length-1];
  }
 var _height= parseInt((window.innerHeight-400)/2),
 _width= parseInt((window.innerWidth-400)/2),
 touchTop=e.clientY - _height,
 touchLeft=e.clientX - _width;
 with(covercanvas){
 beginPath();
 arc(touchLeft, touchTop, 10, 0, Math.PI * 2);
 fill();
 } 
 }
 //alert(touchTop);
 }
 fillter(covercanvas);
 covercanvas.globalCompositeOperation = 'destination-out';
 cover.addEventListener('touchstart',isDown);
 cover.addEventListener('touchmove',draw);
 cover.addEventListener('touchend',isUp);
 cover.addEventListener('mousemove',draw);
 cover.addEventListener('mousedown',isDown);
 cover.addEventListener('mouseup',isUp);
</script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Display SQL Server Version Information
Jun 21 Javascript
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
与Math.pow 相反的函数使用介绍
Aug 04 Javascript
javascript批量修改文件编码格式的方法
Jan 27 Javascript
Grunt入门教程(自动任务运行器)
Aug 06 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
AngularJS 与百度地图的结合实例
Oct 20 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 Javascript
taro小程序添加骨架屏的实现代码
Nov 15 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
Mar 14 #Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
Mar 14 #Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 #Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 #Javascript
jQuery ajax实现省市县三级联动
Mar 07 #Javascript
Javascript前端经典的面试题及答案
Mar 14 #Javascript
layer弹出层框架alert与msg详解
Mar 14 #Javascript
You might like
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
JavaScript 比较时间大小的代码
2010/04/24 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
Python不规范的日期字符串处理类
2014/06/10 Python
python之wxPython应用实例
2014/09/28 Python
Python中List.count()方法的使用教程
2015/05/20 Python
django框架如何集成celery进行开发
2017/05/24 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python callable内置函数原理解析
2020/03/05 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python PyQt5整理介绍
2020/04/01 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
公务员转正考察材料
2014/02/07 职场文书
秋游活动策划方案
2014/02/16 职场文书
2014年元旦感言
2014/03/06 职场文书
园林系毕业生求职信
2014/06/23 职场文书
安全目标管理责任书
2014/07/25 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
校园安全学习心得体会
2016/01/18 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android