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 相关文章推荐
(function($){...})(jQuery)的意思
Jul 22 Javascript
jquery属性过滤选择器使用示例
Jun 18 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
JavaScript浏览器对象之一Window对象详解
Jun 03 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
webpack构建的详细流程探底
Jan 08 Javascript
对vue里函数的调用顺序介绍
Mar 17 Javascript
利用JS如何获取form表单数据
Dec 19 Javascript
js简单实现自动生成表格功能示例
Jun 02 Javascript
js之ajax文件上传
May 13 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 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
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
定义select的边框颜色
2008/04/28 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
python读写ini文件示例(python读写文件)
2014/03/25 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
canvas使用注意点总结
2013/07/19 HTML / CSS
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
普通员工辞职信
2014/01/17 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
超市主管竞聘书
2015/09/15 职场文书
周一问候语大全
2015/11/10 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
php修改word的实例方法
2021/11/17 PHP