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实现毛玻璃效果示例源码
Sep 25 HTML / CSS
纯CSS实现菜单、导航栏的3D翻转动画效果
Apr 23 HTML / CSS
一款纯css3实现的响应式导航
Oct 31 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
Oct 19 HTML / CSS
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
Dec 30 HTML / CSS
css3 仿写阿里云水纹效果的示例代码
Feb 10 HTML / CSS
HTML5 canvas实现雪花飘落特效
Mar 08 HTML / CSS
HTML5实现Notification API桌面通知功能
Mar 02 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
Nov 18 HTML / CSS
html5中 media(播放器)的api使用指南
Dec 26 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
Feb 13 HTML / CSS
z-index不起作用
Mar 31 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
自己前几天写的无限分类类
2007/02/14 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python实现顺时针打印矩阵
2019/03/02 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
python编写俄罗斯方块
2020/03/13 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
省三好学生申请材料
2014/01/22 职场文书
秘书英文求职信范文
2014/01/31 职场文书
法人授权委托书范本
2014/04/04 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
详解TypeScript的基础类型
2022/02/18 Javascript