手机端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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
拥抱模块化的JavaScript
Mar 07 Javascript
jQuery Mobile 导航栏代码
Nov 01 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
Dec 17 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
js 获取html5的data属性实现方法
Jul 28 Javascript
Angularjs 1.3 中的$parse实例代码
Sep 14 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
一个小时快速搭建微信小程序的方法步骤
Apr 15 Javascript
详解微信小程序网络请求接口封装实例
May 02 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 无线电
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
python按照多个条件排序的方法
2019/02/08 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
一套PHP的笔试题
2013/05/31 面试题
合作经营协议书
2014/04/17 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
党员争先创优承诺书
2015/01/20 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书