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 相关文章推荐
另类调用flash无须激活的方法
Dec 27 Javascript
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
AngularJS语法详解
Jan 23 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
May 20 Javascript
JS实现区分中英文并统计字符个数的方法示例
Jun 09 Javascript
Vue组件之单向数据流的解决方法
Nov 10 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
Apr 23 jQuery
微信小程序如何使用globalData的方法
Jun 06 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插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
php简单图像创建入门实例
2015/06/10 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
python抓取网页中的图片示例
2014/02/28 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python字符串的常见操作实例小结
2019/04/08 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Python urllib2运行过程原理解析
2020/06/04 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
医院护士的求职信
2014/01/03 职场文书
工作建议书范文
2014/05/13 职场文书
奥运会口号
2014/06/13 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS