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 相关文章推荐
jQuery 选择表格(table)里的行和列及改变简单样式
Dec 15 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
讲解JavaScript中for...in语句的使用方法
Jun 03 Javascript
jquery实现的伪分页效果代码
Oct 29 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
解决layui-open关闭自身窗口的问题
Sep 10 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
ant design vue的form表单取值方法
Jun 01 Vue.js
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 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
详解PHP数组赋值方法
2015/11/07 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
javascript 关闭IE6、IE7
2009/06/01 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
体育专业学生自我评价范文
2014/01/17 职场文书
师范学院教师自荐书
2014/01/31 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
工作岗位说明书模板
2014/05/09 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
暂住证证明
2015/06/19 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书