手机端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 相关文章推荐
基于jQuery的360图片展示实现代码
Jun 14 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
javascript中AJAX用法实例分析
Jan 30 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
通过fastclick源码分析彻底解决tap“点透”
Dec 24 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
vue中使用protobuf的过程记录
Oct 26 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
微信小程序和H5页面间相互跳转代码实例
Sep 19 Javascript
微信小程序自定义组件components(代码详解)
Oct 21 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
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
javascript 的Document属性和方法集合
2010/01/25 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
js动态切换图片的方法
2015/01/20 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
银行实习鉴定
2013/12/13 职场文书
门卫工作岗位职责
2013/12/17 职场文书
会计人员岗位职责
2014/03/19 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
学校推普周活动总结
2015/05/07 职场文书