手机端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 FormatNumber函数实现方法
Dec 30 Javascript
用Javascript实现Windows任务管理器的代码
Mar 27 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
当前页禁止复制粘贴截屏代码小集
Jul 24 Javascript
javascript关于运动的各种问题经典总结
Apr 27 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
使用JS正则表达式 替换括号,尖括号等
Nov 29 Javascript
easyui简介_动力节点Java学院整理
Jul 14 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
js利用拖放实现添加删除
Aug 27 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
JAVA/JSP学习系列之六
2006/10/09 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
js加强的经典分页实例
2013/03/15 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python 全文检索引擎详解
2017/04/25 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python图形用户接口实例详解
2019/12/16 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
超市仓管员岗位职责范本
2014/09/18 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
世界文化遗产导游词
2015/02/13 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server