js+canvas實現(xiàn)刮刮獎功能
更新時間:2020年09月13日 10:01:10 作者:暗鎖讀客
這篇文章主要為大家詳細介紹了js+canvas實現(xiàn)刮刮獎功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了js+canvas實現(xiàn)刮刮獎的具體代碼,供大家參考,具體內容如下
1.實現(xiàn)了PC端的刮刮獎效果
2.使用了canvas的文本,像素操作,合成,繪制圖形,隨機數(shù)
<!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");
// 搭建環(huán)境
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中break,continue和return語句用法小結
break,continue和return這三個語句的用法新手們經(jīng)常弄混淆,至少在我學習c語言的時候經(jīng)常把它們的用法給搞錯。不過現(xiàn)在好了,我已徹底搞清楚它們之間的用法2012-05-05

