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 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 Javascript
JavaScript中的类数组对象介绍
Dec 30 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 Javascript
Sea.JS知识总结
May 05 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
bootstrap suggest下拉框使用详解
Apr 10 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
Apr 14 Javascript
vue data恢复初始化数据的实现方法
Oct 31 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 Javascript
微信小程序实现吸顶特效
Jan 08 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
jquery ready()的几种实现方法小结
2010/06/18 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
js中replace的用法总结
2013/12/27 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
python全栈要学什么 python全栈学习路线
2019/06/28 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
python调用接口的4种方式代码实例
2019/11/19 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
股权转让协议书范本
2014/04/12 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
无线电通信名词解释
2022/02/18 无线电
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL
keepalived + nginx 实现高可用方案
2022/12/24 Servers