利用HTML5的画布Canvas实现刮刮卡效果


Posted in Javascript onSeptember 06, 2015

先给大家展示效果:

利用HTML5的画布Canvas实现刮刮卡效果

查看演示   源码下载

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

我们利用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);

以上内容仅供参考,大家可以结合实际情况,结合后台程序和数据库,完成一个真正的刮刮乐。以上内容是我写的利用HTML5的画布Canvas实现刮刮卡效果,希望大家喜欢。

Javascript 相关文章推荐
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
JavaScript数据结构与算法之栈详解
Mar 12 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
Mar 15 Javascript
js实现随机点名小功能
Aug 17 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
May 28 Javascript
vue项目中mock.js的使用及基本用法
May 22 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
Sep 06 #Javascript
jQuery实现美观的多级动画效果菜单代码
Sep 06 #Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 #Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
Sep 06 #Javascript
jquery京东商城双11焦点图多图广告特效代码分享
Sep 06 #Javascript
javascript日期处理函数,性能优化批处理
Sep 06 #Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 #Javascript
You might like
php实例化一个类的具体方法
2019/09/19 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
JavaScript Date对象使用总结
2009/05/14 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
Python文件去除注释的方法
2015/05/25 Python
Python实现端口检测的方法
2018/07/24 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
python实现两张图片的像素融合
2019/02/23 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
自我推荐书
2013/12/04 职场文书
运动会通讯稿100字
2014/01/31 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
银行奉献演讲稿
2014/09/16 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
干部年终考核评语
2015/01/04 职场文书
七一慰问简报
2015/07/20 职场文书