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 相关文章推荐
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
jQuery监控文本框事件并作相应处理的方法
Apr 16 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
jquery拖拽效果完整实例(附demo源码下载)
Jan 14 Javascript
vue的props实现子组件随父组件一起变化
Oct 27 Javascript
canvas 绘制圆形时钟
Feb 22 Javascript
详解AngularJS 模块化
Jun 14 Javascript
layui select动态添加option的实例
Mar 07 Javascript
Vue.js实现的表格增加删除demo示例
May 22 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
js实现数字从零慢慢增加到指定数字示例
Nov 07 Javascript
Vue之封装公用变量以及实现方式
Jul 31 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
模拟xcopy的函数
2006/10/09 PHP
基于文本的搜索
2006/10/09 PHP
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python读大数据txt
2016/03/28 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
女方回门宴答谢词
2014/01/14 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
员工年终自我评价
2014/09/14 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
计生个人工作总结
2015/02/28 职场文书
会议室管理制度范本
2015/08/06 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
sql中mod()函数取余数的用法
2021/05/29 SQL Server
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
Vue.Draggable实现交换位置
2022/04/07 Vue.js
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python