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 相关文章推荐
由JavaScript技术实现的web小游戏(不含网游)
Jun 12 Javascript
javascript深入理解js闭包
Jul 03 Javascript
js onkeypress与onkeydown 事件区别详细说明
Dec 13 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
详解Javascript中的Object对象
Feb 28 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
mongoose更新对象的两种方法示例比较
Dec 19 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
让你的网站首页自动选择语言转跳
2006/12/06 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
Javascript事件实例详解
2013/11/06 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Python如何获取文件指定行的内容
2020/05/27 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
致800米运动员广播稿
2014/02/16 职场文书
大学军训感言1000字
2014/02/25 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
西安兵马俑导游词
2015/02/02 职场文书
三好学生竞选稿
2015/11/21 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
Python下opencv库的安装过程及问题汇总
2021/06/11 Python