手机端js和html5刮刮卡效果


Posted in Javascript onSeptember 29, 2020

H5的Canvas实现刮刮卡效果。 刮开之后是随机生成的8位码。

手机端js和html5刮刮卡效果

IE8不行...

<!DOCTYPE html> 
<html> 
<head> 
 <meta charset="utf-8"> 
 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
 <meta name="viewport" content="width=device-width, initial-scale=1"> 
 <title>HTML5 刮刮卡</title> 
 <link rel="stylesheet" type="text/css" href="" /> 
 <style type="text/css"> 
 .demo{width:320px; margin:10px auto 20px auto; min-height:300px;} 
 .msg{text-align:center; height:32px; line-height:32px; font-weight:bold; margin-top:50px} 
 </style> 
</head> 
 
<body> 
 <div id="main"> 
 <h2 align="center">HTML5 刮刮卡(支持手机)</a></h2> 
 <div class="msg">刮开灰色部分看看,<a href="javascript:void(0)" onClick="window.location.reload()">再来一次</a></div> 
 <div class="demo"> 
  <canvas id="canvasBotm"></canvas> 
  <canvas id="canvasTop"></canvas> 
  
 </div> 
 </div> 
 
<script type="text/javascript"> 
 
 //生成随机数据。n表示位数 
 var jschars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; 
 function generateMixed(n) { 
 var res = ""; 
 for(var i = 0; i < n ; i ++) { 
  var id = Math.ceil(Math.random()*61); 
  res += jschars[id]; 
 } 
 //alert(res); 
 return res; 
 }   
 
 //禁用页面的鼠标选中拖动的事件 
 var bodyStyle = document.body.style; 
 bodyStyle.mozUserSelect = 'none'; 
 bodyStyle.webkitUserSelect = 'none'; 
 
 //定义图片类,获取canvas元素,并设置背景和位置属性 
 var img = new Image(); 
 var canvas = document.getElementById('canvasTop'); 
 var canvasBotm = document.getElementById('canvasBotm'); 
 canvas.style.backgroundColor='transparent'; 
 canvas.style.position = 'absolute'; 
 canvasBotm.style.backgroundColor='#f3f3f3'; //验证码背景色 
 canvasBotm.style.position = 'absolute'; 
 
 var imgs = ['p_0.jpg','p_1.jpg']; 
 var num = Math.floor(Math.random()*2); 
 img.src = imgs[num]; 
 
 img.addEventListener('load', function(e) { 
 var ctx; 
 var w = img.width, 
  h = img.height; 
 var offsetX = canvas.offsetLeft, 
  offsetY = canvas.offsetTop; 
 var mousedown = false; 
 //函数layer()用来绘制一个灰色的正方形 
 function layer(ctx) { 
  ctx.fillStyle = 'grey'; 
  ctx.fillRect(0, 0, w, h); 
 } 
 function layerBotm(ctxBotm) { 
  ctxBotm.fillStyle = 'grey'; 
  ctxBotm.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) {   //当按下时,获取坐标位移,并通过arc(x, y, 10, 0, Math.PI * 2)来绘制小圆点 
   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调用以上函数,绘制图形,并且侦听触控及鼠标事件,调用相应的函数 
 canvas.width=w; 
 canvas.height=h; 
 canvasBotm.width=w; 
 canvasBotm.height=h; 
 //canvas.style.backgroundImage='url('+img.src+')'; 
 //canvas.style.backgroundColor='#f3f3f3'; 
  
 ctxBotm=canvas.getContext("2d"); 
 ctx=canvasBotm.getContext("2d"); 
 ctx.font="50px Arial"; 
 
 // 创建渐变 
 var gradient=ctx.createLinearGradient(0,0,canvas.width,0); 
 gradient.addColorStop("0","magenta"); 
 gradient.addColorStop("0.5","blue"); 
 gradient.addColorStop("1.0","red"); 
  
 //实习字体 
 ctx.fillStyle=gradient; 
 ctx.fillText(generateMixed(8),40,90); 
 //空心字体 
 ctx.strokeStyle=gradient; 
 ctx.strokeText(generateMixed(8),40,90); 
  
 ctx=canvas.getContext('2d'); 
 ctx.fillStyle='transparent'; 
 ctx.fillRect(0, 0, w, h); 
 
 layerBotm(ctxBotm); 
 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); 
 }); 
</script> 
</body> 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript实现禁止后退的方法
Dec 27 Javascript
JavaScript 判断浏览器类型及版本
Feb 21 Javascript
javascript调试说明
Jun 07 Javascript
如何使Chrome控制台支持多行js模式——意外发现
Jun 13 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
Dec 10 Javascript
微信企业号开发之微信考勤百度地图定位
Sep 11 Javascript
JavaScript encodeURI 和encodeURIComponent
Dec 04 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
Oct 24 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
Vue如何从1.0迁移到2.0
Oct 19 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
vue 子组件和父组件传值的示例
Sep 11 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 #Javascript
laydate.js日期时间选择插件
Jan 04 #Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 #Javascript
微信小程序 解决swiper不显示图片的方法
Jan 04 #Javascript
bootstrap laydate日期组件使用详解
Jan 04 #Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 #Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 #Javascript
You might like
西德产收音机
2021/03/01 无线电
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
python添加模块搜索路径和包的导入方法
2019/01/19 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
python super的使用方法及实例详解
2019/09/25 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
人力资源经理自我评价
2014/01/04 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
师德师风事迹材料
2014/12/20 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android