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 相关文章推荐
jQuery弹出层插件简化版代码下载
Oct 16 Javascript
javascript Onunload与Onbeforeunload使用小结
Dec 31 Javascript
js 返回时间戳所对应的具体时间
Jul 20 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
Node.js操作redis实现添加查询功能
May 25 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
关于微信小程序bug记录与解决方法
Aug 15 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
vue随机验证码组件的封装实现
Feb 19 Javascript
Element Rate 评分的使用方法
Jul 27 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
Sep 18 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
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
javascript跨域的方法汇总
2015/10/23 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
javascript自执行函数
2017/02/10 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
浅谈js闭包理解
2019/03/28 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
python查找第k小元素代码分享
2013/12/18 Python
python中ConfigParse模块的用法
2014/09/29 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
Python中字符串与编码示例代码
2019/05/20 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
python 实现字符串下标的输出功能
2020/02/13 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
大学生毕业的自我鉴定
2013/11/13 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
公司2015年终工作总结
2015/05/26 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python