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 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
jQuery的基本概念与高级编程
May 14 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
jQuery实现调整表格单列顺序完整实例
Jun 20 Javascript
jQuery Raty 一款不错的星级评分插件
Aug 24 Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 Javascript
js上下视差滚动简单实现代码
Mar 07 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
Apr 17 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
js 计数排序的实现示例(升级版)
Jan 12 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 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脚本的10个技巧(4)
2006/10/09 PHP
php&amp;java(二)
2006/10/09 PHP
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
前端性能优化建议
2020/09/17 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
python的id()函数介绍
2013/02/10 Python
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python实现rest请求api示例
2014/04/22 Python
python 默认参数问题的陷阱
2016/02/29 Python
Python自动发邮件脚本
2017/03/31 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
学校学雷锋活动总结
2014/06/26 职场文书
学前班语言教学计划
2015/01/20 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
卡特教练观后感
2015/06/08 职场文书
宿舍管理制度范本
2015/08/07 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
Python绘制分类图的方法
2021/04/20 Python
python绘制箱型图
2021/04/27 Python
python字符串的一些常见实用操作
2022/04/06 Python