js+canvas实现刮刮奖功能

 更新时间:2020年09月13日 10:01:10   作者:暗锁读客  
这篇文章主要为大家详细介绍了js+canvas实现刮刮奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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>

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

相关文章

  • 前端必会的图片懒加载(三种方式)

    前端必会的图片懒加载(三种方式)

    在我们访问一个图片展示比较多的网页时,加载速度慢很多时候正是因为图片多导致,本文主要介绍了前端必会的图片懒加载(三种方式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • uniapp-路由uni-simple-router安装配置教程

    uniapp-路由uni-simple-router安装配置教程

    专为uniapp打造的路由器,和uniapp深度集成,uniapp用到了很多vue的api,但在路由管理的功能相对于vue-router还是比较欠缺的,比如全局导航守卫,本文给大家讲解uniapp-路由uni-simple-router相关知识,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • 微信小程序在ios下Echarts图表不能滑动的问题解决

    微信小程序在ios下Echarts图表不能滑动的问题解决

    这篇文章主要介绍了微信小程序在ios下Echarts图表不能滑动的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来一起学习下吧
    2019-07-07
  • JavaScript中三种非破坏性处理数组的方法比较

    JavaScript中三种非破坏性处理数组的方法比较

    在这篇文章中,我们将会探索处理数组的三种方法:for…of循环、数组方法.reduce()和数组方法.flatMap(),文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-06-06
  • js canvas实现放大镜查看图片功能

    js canvas实现放大镜查看图片功能

    这篇文章主要为大家详细介绍了js canvas实现放大镜查看图片功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • layer 刷新某个页面的实现方法

    layer 刷新某个页面的实现方法

    今天小编就为大家分享一篇layer 刷新某个页面的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 循环 vs 递归浅谈

    循环 vs 递归浅谈

    本文代码使用 JavaScript。 一些同学对递归的理解还停留在“是一种求阶乘比循环低效的方法”。但其实递归和循环处理的问题是不同。拿“遍历数组”这个问题来说:循环适合同一维度(单层长度不限)上的遍历,而递归则适合跨维度(层数不限)的遍历。
    2013-02-02
  • JS基于FileSystemObject创建一个指定路径的TXT文本文件

    JS基于FileSystemObject创建一个指定路径的TXT文本文件

    这篇文章主要介绍了JS基于FileSystemObject创建一个指定路径的TXT文本文件,涉及javascript使用ActiveXObject控件中FileSystemObject对象模型的基本技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • javascript打开新窗口同时关闭旧窗口

    javascript打开新窗口同时关闭旧窗口

    因业务需要,在网上查找这个问题的解决办法,但是昏天黑地地搞了半天,找到的方法虽然可以实现功能,但是总是会跳出讨厌的“关闭窗口”的提示框,郁闷。
    2009-01-01
  • Qt利用布局widget和ScrollArea实现抽屉效果(实例代码)

    Qt利用布局widget和ScrollArea实现抽屉效果(实例代码)

    这篇文章主要介绍了Qt利用布局,widget和ScrollArea实现抽屉效果,本文通过实例代码图文展示给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07

最新评论