利用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右键菜单效果代码
Jul 21 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
JS下载文件|无刷新下载文件示例代码
Apr 17 Javascript
微信小程序实现图片预加载组件
Jan 18 Javascript
Vue结合原生js实现自定义组件自动生成示例
Jan 21 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
微信小程序实现无限滚动列表
May 29 Javascript
vue elementUI 表单校验功能之数组多层嵌套
Jun 04 Javascript
js验证账户名是否重复
May 26 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
php 缓存函数代码
2008/08/27 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
Python 备份程序代码实现
2017/03/06 Python
python实现二叉树的遍历
2017/12/11 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
领导批评与自我批评范文
2014/10/16 职场文书
保研专家推荐信范文
2015/03/25 职场文书
考博导师推荐信范文
2015/03/27 职场文书
初中体育教学随笔
2015/08/15 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python