HTML5 canvas标签实现刮刮卡效果


Posted in HTML / CSS onApril 24, 2015

你玩过刮刮卡么?一不小心可以中奖的那种。今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果。

HTML5 canvas标签实现刮刮卡效果

源码下载:点击下载

我们利用HTML5的画布Canvas,结合其提供的API,在Canvas元素上绘制一个灰色蒙层,然后通过检测用户鼠标移到和手势来绘制一个透明的图形,这样就能看到Canvas背景下的真实图片,就达到刮刮卡效果。

HTML

我们只需要在页面中加入canvas标签元素,其他的就看javascript的了。注意canvas元素是HTML5才有的元素,运行在支持HTML5的现代浏览器上。

复制代码
代码如下:

<canvas></canvas>

Javascript

首先,我们要禁用页面的鼠标选中拖动的事件,就是不运行执行选中操作。

复制代码
代码如下:

var bodyStyle = document.body.style;
bodyStyle.mozUserSelect = 'none';
bodyStyle.webkitUserSelect = 'none';

接着我们定义图片类,获取canvas元素,并设置背景和位置属性。我们在本例中用到两张随机照片,每次刷新随机一张图片作为背景。
复制代码
代码如下:

var img = new Image();
var canvas = document.querySelector('canvas');
canvas.style.backgroundColor='transparent';
canvas.style.position = 'absolute';
var imgs = ['p_0.jpg','p_1.jpg'];
var num = Math.floor(Math.random()*2);
img.src = imgs[num];

然后进入主体,当检测到图片加载完的时候,首先定义一些属性和函数,函数layer()用来绘制一个灰色的正方形,eventDown()定义了按下事件eventUp()定义了松开事件,eventMove()定义了移动事件,其中当按下时,获取坐标位移,并通过arc(x, y, 10, 0, Math.PI * 2)来绘制小圆点。
复制代码
代码如下:

img.addEventListener('load', function(e) {
var ctx;
var w = img.width,
h = img.height;
var offsetX = canvas.offsetLeft,
offsetY = canvas.offsetTop;
var mousedown = false;

function layer(ctx) {
ctx.fillStyle = 'gray';
ctx.fillRect(0, 0, w, h);
}

function eventDown(e){
e.preventDefault();
mousedown=true;
}

function eventUp(e){
e.preventDefault();
mousedown=false;
}

function eventMove(e){
e.preventDefault();
if(mousedown) {
if(e.changedTouches){
e=e.changedTouches[e.changedTouches.length-1];
}
var x = (e.clientX + document.body.scrollLeft || e.pageX) - offsetX || 0,
y = (e.clientY + document.body.scrollTop || e.pageY) - offsetY || 0;
with(ctx) {
beginPath()
arc(x, y, 10, 0, Math.PI * 2);//绘制圆点
fill();
}
}
}

//...
});


最后,通过canvas调用以上函数,绘制图形,并且侦听触控及鼠标事件,调用相应的函数,请看代码:
复制代码
代码如下:

img.addEventListener('load', function(e) {
//..接上段代码
canvas.width=w;
canvas.height=h;
canvas.style.backgroundImage='url('+img.src+')';
ctx=canvas.getContext('2d');
ctx.fillStyle='transparent';
ctx.fillRect(0, 0, w, h);//绘制矩形
layer(ctx);

ctx.globalCompositeOperation = 'destination-out';

canvas.addEventListener('touchstart', eventDown);
canvas.addEventListener('touchend', eventUp);
canvas.addEventListener('touchmove', eventMove);
canvas.addEventListener('mousedown', eventDown);
canvas.addEventListener('mouseup', eventUp);
canvas.addEventListener('mousemove', eventMove);


你可以下载DEMO中的完整的代码,你可以根据实际需求,结合后台程序与数据库,完成一个真正的刮刮卡程序。
HTML / CSS 相关文章推荐
CSS3 网页下拉菜单代码解释 中文翻译
Feb 27 HTML / CSS
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
Jun 03 HTML / CSS
css3 条纹化和透明化表格Firefox下测试成功
Apr 15 HTML / CSS
CSS3常用的几种颜色渐变模式总结
Nov 18 HTML / CSS
animation和transition的区别
Oct 12 HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
Feb 08 HTML / CSS
HTML5 本地存储实现购物车功能
Sep 07 HTML / CSS
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
Apr 14 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
Dec 07 HTML / CSS
深入浅析HTML5中的article和section的区别
May 15 HTML / CSS
html5手机键盘弹出收起的处理
Jan 20 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
Aug 19 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 #HTML / CSS
Html5+JS实现手机摇一摇功能
Apr 24 #HTML / CSS
HTML5 Canvas的事件处理介绍
Apr 24 #HTML / CSS
HTML5 audio标签使用js进行播放控制实例
Apr 24 #HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 #HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
Apr 24 #HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
Apr 24 #HTML / CSS
You might like
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
树结构之JavaScript
2017/01/24 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python matlibplot绘制3D图形
2018/07/02 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python轮询机制控制led实例
2020/05/03 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
Servlet面试题库
2015/07/18 面试题
学术会议欢迎词
2014/01/09 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
研发工程师岗位职责
2014/04/28 职场文书
社会实践活动总结格式
2015/05/11 职场文书
学生会自荐信
2019/05/16 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
MySQL多表查询机制
2022/03/17 MySQL
Vue操作Storage本地化存储
2022/04/29 Vue.js