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 创建对象
Jul 17 Javascript
JavaScript 获取用户客户端操作系统版本
Aug 25 Javascript
javascript数组去重3种方法的性能测试与比较
Mar 26 Javascript
javascript获取鼠标点击元素对象(示例代码)
Dec 20 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
Apr 21 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 Javascript
angular学习之动态创建表单的方法
Dec 07 Javascript
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
javascript数组去掉重复
2011/05/12 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python程序运行原理图文解析
2018/02/10 Python
对python多线程与global变量详解
2018/11/09 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Python pandas如何向excel添加数据
2020/05/22 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
美国智能家居专家:tink
2019/06/04 全球购物
如何获得EntityManager
2014/02/09 面试题
求职信的最佳写作思路
2014/02/01 职场文书
简历上的自我评价
2014/02/03 职场文书
主题教育活动总结
2014/05/05 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
汇报材料怎么写
2014/12/30 职场文书
黄河绝恋观后感
2015/06/08 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS