手机端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 相关文章推荐
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
Aug 13 Javascript
影响jQuery使用的14个方面
Sep 01 Javascript
jquery 一键复制到剪切板的实例
Sep 20 jQuery
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
May 18 Javascript
JavaScript中的一些实用小技巧总结
Apr 07 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
Django+Vue实现WebSocket连接的示例代码
May 28 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
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
PHP 面向对象 final类与final方法
2010/05/05 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
讲解Python中的标识运算符
2015/05/14 Python
Python实现简单http服务器
2018/04/12 Python
20行python代码实现人脸识别
2019/05/05 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
《秋游》教学反思
2014/04/24 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL