利用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 相关文章推荐
用jquery来定位
Feb 20 Javascript
javascript中var的重要性分析
Feb 11 Javascript
jQuery在线选座位插件seat-charts特效代码分享
Aug 27 Javascript
每日十条JavaScript经验技巧(二)
Jun 23 Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 Javascript
一个有意思的鼠标点击文字特效jquery代码
Sep 23 jQuery
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
vue里input根据value改变背景色的实例
Sep 29 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
Sep 26 Javascript
Vuex中实现数据状态查询与更改
Nov 08 Javascript
JavaScript枚举选择jquery插件代码实例
Nov 17 jQuery
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
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
input 输入框内的输入事件详细分析
2010/03/17 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
老生常谈angularjs中的$state.go
2017/04/24 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python中hashlib模块用法示例
2017/10/30 Python
Linux下多个Python版本安装教程
2018/08/15 Python
python requests.post带head和body的实例
2019/01/02 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
Python实现括号匹配方法详解
2020/02/10 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python如何调用字典的key
2020/05/25 Python
Python join()函数原理及使用方法
2020/11/14 Python
weblogic面试题
2016/03/07 面试题
大学活动策划书范文
2014/01/10 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
2014小学年度工作总结
2014/12/20 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书