js+canvas实现刮刮奖功能


Posted in Javascript onSeptember 13, 2020

本文实例为大家分享了js+canvas实现刮刮奖的具体代码,供大家参考,具体内容如下

1.实现了PC端的刮刮奖效果

2.使用了canvas的文本,像素操作,合成,绘制图形,随机数

<!DOCTYPE html>
<html>

 <head>
 <meta charset="UTF-8">
 <title>刮刮奖</title>
 <style type="text/css">
 * {
 margin: 0;
 padding: 0;
 }
 
 .box {
 width: 500px;
 height: 500px;
 margin: 0 auto;
 position: relative;
 background: #00BFFF;
 }
 
 #prize {
 width: 300px;
 height: 100px;
 position: absolute;
 top: 50%;
 left: 50%;
 margin: -50px 0 0 -150px;
 background: #fff;
 font-family: "微软雅黑";
 font-size: 40px;
 text-align: center;
 line-height: 100px;
 -webkit-user-select: none;
 }
 
 #myCanvas {
 position: absolute;
 top: 50%;
 left: 50%;
 margin: -50px 0 0 -150px;
 }
 </style>
 </head>

 <body>
 <div class="box">
 <div id="prize"></div>
 <canvas id="myCanvas" width="300" height="100"></canvas>
 </div>
 </body>
 <script type="text/javascript">
 //获取对象
 var textArr = ["一等奖", "二等奖", "三等奖", "谢谢惠顾", "再来一次"];
 var prize = document.getElementById("prize");
 var num = Math.random() * 100;
 if (num <= 60) {
 prize.innerText = textArr[3];
 } else if (num <= 70) {
 prize.innerText = textArr[4];
 } else if (num <= 80) {
 prize.innerText = textArr[2];
 } else if (num <= 90) {
 prize.innerText = textArr[1];
 } else if (num <= 100) {
 prize.innerText = textArr[0];
 }
 var myCanvas = document.getElementById("myCanvas");
 // 搭建环境
 var cxt = myCanvas.getContext("2d");
 cxt.globalAlpha = 1;
 cxt.fillStyle = "#ccc";
 cxt.fillRect(0, 0, 300, 100);
 var txt = "刮刮奖";
 cxt.fillStyle = "#000";
 cxt.font = "30px 微软雅黑";
 cxt.textAlign = "center";
 cxt.textBaseline = "middle";
 cxt.fillText(txt, 150, 50, 300);
 var mX, mY;
 var flag = false;
 myCanvas.onmousedown = function(e) {
 flag = true;
 mX = e.offsetX;
 mY = e.offsetY;
 drawArc(mX, mY);
 }
 document.body.onmousemove = function(e) {
 if (flag == true) {
 mX = e.offsetX;
 mY = e.offsetY;
 drawArc(mX, mY);
 }
 }
 document.body.onmouseup = function() {
 flag = false;
 sayPrize();
 }

 function drawArc(x, y) {
 cxt.globalCompositeOperation = "destination-out"; //相交部分不显示
 cxt.beginPath();
 cxt.fillStyle = "white";
 cxt.moveTo(x, y);
 cxt.arc(x, y, 10, 0, 2 * Math.PI);
 cxt.fill();
 }

 function sayPrize() {
 var myImg = cxt.getImageData(70, 30, 160, 40);
 // var myImg = cxt.getImageData(93, 37, 40, 30);
 // 设置像素点的颜色
 var num = 0;
 var max = myImg.data.length / 4;
 for (var i = 0; i < myImg.data.length; i += 4) {
 if (myImg.data[i + 3] <= 200) {
 num++;
 }
 }
 //2/3*myImg.data.length/4
 if (num >= max * 0.6) {
 alert("恭喜您,获得:" + prize.innerText);
 }
 }
 </script>

</html>

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

Javascript 相关文章推荐
Javascript的IE和Firefox兼容性汇编(zz)
Feb 02 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
Jul 25 Javascript
js的一些常用方法小结
Jun 29 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
Mar 05 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
Aug 16 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
实例分析JS与Node.js中的事件循环
Dec 12 Javascript
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
Dec 02 Javascript
详解vue-router的导航钩子(导航守卫)
Nov 02 Javascript
js+css3实现简单时钟特效
Sep 13 #Javascript
jquery实现简易验证插件封装
Sep 13 #jQuery
利用H5api实现时钟的绘制(javascript)
Sep 13 #Javascript
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 #Javascript
返回上一个url并刷新界面的js代码
Sep 12 #Javascript
Vue和React有哪些区别
Sep 12 #Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
Sep 12 #Javascript
You might like
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
php mysql 封装类实例代码
2016/09/18 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
JavaScript 闭包的使用场景
2020/09/17 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
设计模式的基本要素是什么
2014/04/21 面试题
护士演讲稿范文
2014/01/05 职场文书
个人简历中自我评价
2014/02/11 职场文书
小学生读书活动总结
2014/06/30 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
罚站检讨书
2015/01/29 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js