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 相关文章推荐
JS对img标签进行优化使用onerror显示默认图像
Apr 24 Javascript
解析JavaScript的ES6版本中的解构赋值
Jul 28 Javascript
JS实现仿微博可关闭弹出层效果
Sep 21 Javascript
javascript+css3 实现动态按钮菜单特效
Feb 06 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
Vue动态控制input的disabled属性的方法
Jun 26 Javascript
微信小程序文章详情页面实现代码
Sep 10 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
微信小程序自定义底部弹出框功能
Nov 18 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 MYSQL 数据备份类
2009/06/19 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php分页函数示例代码分享
2014/02/24 PHP
php统计文章排行示例
2014/03/04 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python基础之文件读取的讲解
2019/02/16 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
小学三年级数学教学反思
2014/01/31 职场文书
员工晚婚的请假条
2014/02/08 职场文书
《颐和园》教学反思
2014/02/26 职场文书
支部书记四风对照材料
2014/08/28 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
文言文辞职信
2015/02/28 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
element tree树形组件回显数据问题解决
2022/08/14 Javascript