刮一刮抽奖 html,javascript+canvas实现刮刮卡抽奖效果

*{ margin:0; padding:0;}

.cjbox{ margin:100px; height:80px; width:200px; background:#FFF; position:relative;}

#canvas{position:absolute; left:0px; top:0px;z-index:99;}

.sjmes{ position:absolute; left:0px; top:0px; height:80px; width:200px; text-align:center; font-size:40px; line-height:80px; z-index:9;}

demo1
刮刮卡简单抽奖

//init

var cjcon=["一等奖","二等奖","三等奖","谢谢参与"];//奖项设置

var cjper=[3,10,20,100];//奖项率,次数

/*

* sjmes

* @Author 透笔度(1530341234@qq.com)

* @param {cjcon} 所有奖项

*/

var percjcon=[];

for(var i=0;i

peic(cjper[i],i);

};

function peic(len,ind){

for(var i=0;i

percjcon.push(cjcon[ind]);

};

};

var sjmes = document.getElementById("sjmes");

var numrandom=Math.floor(Math.random()*percjcon.length);

sjmes.innerHTML=percjcon[numrandom];

var opacityb=0.5;//透明百分比,参考值,什么程度出现提示

var backcolorb="#ffaaaa";

var numl=200*80;//总像素个数

var nump;//出现backcolorb的个数

var opacitya;//透明百分比实际值

var canvas = document.getElementById("canvas"); //获取canvas

var context = canvas.getContext('2d'); //canvas追加2d画图

var flag = 0; //标志,判断是按下后移动还是未按下移动 重要

var penwidth=20; //画笔宽度

context.fillStyle="#faa"; //填充的颜色

context.fillRect(0,0,200,80); //填充颜色 x y坐标 宽 高

canvas.addEventListener('mousemove', onMouseMove, false); //鼠标移动事件

canvas.addEventListener('mousedown', onMouseDown, false); //鼠标按下事件

canvas.addEventListener('mouseup', onMouseUp, false); //鼠标抬起事件

var movex=-1;

var movey=-1;

var imgData;//imagedada容器

var rgbabox=[];//存放读取后的rgba数据;

function onMouseMove(evt) {

if (flag == 1) {

movex=evt.layerX;

movey=evt.layerY;

context.fillStyle="#FF0000";

context.beginPath();

context.globalCompositeOperation="destination-out";

context.arc(movex,movey,penwidth,0,Math.PI*2,true); //Math.PI*2是JS计算方法,是圆

context.closePath();

context.fill();

}

}

function onMouseDown(evt) {

flag = 1; //标志按下

}

function onMouseUp(evt) {

flag = 0;

//读取像素数据

imgData=context.getImageData(0,0,200,80);//获取当前画布数据

//imgData.data.length 获取图片数据总长度,没4个为一组存放rgba

for(var i=0; i

var rval=imgData.data[i];

var gval=imgData.data[i+1];

var bval=imgData.data[i+2];

var aval=imgData.data[i+3];

var rgbaval=rval+"-"+gval+"-"+bval+"-"+aval;

rgbabox.push(rgbaval);

}

//end

for(var j=0;j

//alert(rgbabox[j].split("-")[0])

rgbabox[j]='#'+rgbToHex(rgbabox[j].split("-")[0],rgbabox[j].split("-")[1],rgbabox[j].split("-")[2]);

}

nump=countSubstr(rgbabox.join(","),backcolorb,true);

opacitya=(numl-nump)/numl;

if(opacitya>opacityb){

alert("恭喜你获得"+percjcon[numrandom])

}else{}

}

function rgbToHex(r, g, b) { return ((r << 16) | (g << 8) | b).toString(16); }//rgb转为16进制 #xxx形式

function countSubstr(str,substr,isIgnore){//计算字符串出现子字符串的个数

var count;

var reg="";

if(isIgnore==true){

reg="/"+substr+"/gi";

}else{

reg="/"+substr+"/g";

}

reg=eval(reg);

if(str.match(reg)==null){

count=0;

}else{

count=str.match(reg).length;

}

return count;

}

//end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的抽奖轮盘实现,使用HTML5 Canvas来绘制: HTML: ```html <!DOCTYPE html> <html> <head> <title>抽奖轮盘</title> <meta charset="UTF-8"> <style> canvas { border: 1px solid #ccc; } </style> </head> <body> <canvas id="myCanvas" width="500" height="500"></canvas> <button onclick="start()">开始</button> </body> </html> ``` JavaScript: ```javascript var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); var angle = 0; var rotateAngle = 0; var prizeArr = ["一等奖", "二等奖", "三等奖", "再接再厉", "谢谢参与"]; var colorArr = ["#FFB6C1", "#FF69B4", "#FF1493", "#DB7093", "#C71585"]; //绘制背景 function drawBg(){ ctx.save(); ctx.translate(250, 250); var colors = colorArr; var startAngle = 0; var endAngle = 0; for(var i = 0; i < 5; i++){ startAngle = endAngle; endAngle = startAngle + Math.PI * 2 / 5; ctx.beginPath(); ctx.moveTo(0, 0); ctx.arc(0, 0, 200, startAngle, endAngle); ctx.closePath(); ctx.fillStyle = colors[i]; ctx.fill(); } ctx.restore(); } //绘制文本 function drawText(){ ctx.save(); ctx.translate(250, 250); var text = prizeArr; var angle = Math.PI / 5; ctx.font = "bold 20px Arial"; ctx.fillStyle = "#fff"; for(var i = 0; i < 5; i++){ ctx.beginPath(); ctx.rotate(angle); ctx.fillText(text[i], -50, -170); ctx.closePath(); angle += Math.PI * 2 / 5; } ctx.restore(); } //绘制指针 function drawPointer(){ ctx.save(); ctx.translate(250, 250); ctx.rotate(rotateAngle); ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(0, -150); ctx.strokeStyle = "#FF0000"; ctx.lineWidth = 5; ctx.stroke(); ctx.closePath(); ctx.restore(); } //开始旋转 function start(){ if(rotateAngle == 0){ angle = Math.floor(Math.random() * 5) * (Math.PI / 5); rotateAngle = angle + Math.PI * 2 * 6; } var timer = setInterval(function(){ drawBg(); drawText(); drawPointer(); rotateAngle -= Math.PI / 180 * 5; if(rotateAngle <= angle){ clearInterval(timer); alert(prizeArr[Math.floor((angle + Math.PI / 5 / 2) / (Math.PI / 5) % 5)]); rotateAngle = 0; } }, 30); } drawBg(); drawText(); ``` 该代码实现了一个简单的抽奖轮盘,点击“开始”按钮时,轮盘将开始旋转,最终停在一个随机的奖项上。在这个例子中,奖项分别为“一等奖”、“二等奖”、“三等奖”、“再接再厉”和“谢谢参与”,奖项的背景颜色为不同的颜色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值