利用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中 用户登录系统的解决办法
Apr 15 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
封装了一个支持匿名函数的Javascript事件监听器
Jun 05 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
关于JavaScript限制字数的输入框的那些事
Aug 14 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
AngularJS 文件上传控件 ng-file-upload详解
Jan 13 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
详解ES6语法之可迭代协议和迭代器协议
Jan 13 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 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
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python 不以科学计数法输出的方法
2018/07/16 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python机器学习实现决策树
2019/11/11 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
平面设计的岗位职责
2013/11/08 职场文书
烹调加工管理制度
2014/02/04 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
四群教育工作实施方案
2014/03/26 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python