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 相关文章推荐
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
Sep 10 Javascript
Javascript闭包(Closure)详解
May 05 Javascript
浅谈document.write()输出样式
May 07 Javascript
原生Javascript插件开发实践
Jan 18 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
Oct 17 Javascript
微信小程序实现左滑修改、删除功能
Oct 19 Javascript
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
JavaScript 去重和重复次数统计
Mar 31 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上的memcache和memcached两个pecl库
2010/03/29 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
python 数据加密代码
2008/12/24 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Django添加feeds功能的示例
2018/08/07 Python
用python解压分析jar包实例
2020/01/16 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
python datetime处理时间小结
2020/04/16 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
工作违纪检讨书
2014/02/17 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
企业党员一句话承诺
2014/05/30 职场文书
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL