首页 > 语言 > JavaScript > 正文

javascript+canvas实现刮刮卡抽奖效果

2024-05-06 16:23:57
字体:
来源:转载
供稿:网友

这篇文章主要介绍了javascript+canvas实现刮刮卡抽奖效果的相关资料,需要的朋友可以参考下

运用canvas做的简单刮刮卡效果,每次刷新可重新测试

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
  5. <style type="text/css"
  6. *{ margin:0; padding:0;}  
  7.  
  8. .cjbox{ margin:100px; height:80px; width:200px; background:#FFF; position:relative;} 
  9. #canvas{position:absolute; left:0px; top:0px;z-index:99;} 
  10. .sjmes{ position:absolute; left:0px; top:0px; height:80px; width:200px; text-align:center; font-size:40px; line-height:80px; z-index:9;} 
  11. </style> 
  12. <title>demo1</title> 
  13. </head> 
  14. <body>  
  15.  
  16. <div style="position:relative; margin:20px 100px; background:#0CF; height:400px; width:500px; margin:0 auto;"
  17. <div>刮刮卡简单抽奖</div> 
  18. <div class="cjbox"
  19. <div class="sjmes" id="sjmes"></div> 
  20. <canvas width=200 height=80 id="canvas"></canvas>  
  21. </div> 
  22. </div>  
  23.  
  24. </body> 
  25. <script type="text/javascript"
  26. //init  
  27. var cjcon=["一等奖","二等奖","三等奖","谢谢参与"];//奖项设置 
  28. var cjper=[3,10,20,100];//奖项率,次数 
  29. /* 
  30. * sjmes 
  31. * @Author 透笔度(1530341234@qq.com)  
  32. * @param {cjcon} 所有奖项  
  33. */ 
  34. var percjcon=[]; 
  35. for(var i=0;i<cjper.length;i++){ 
  36. peic(cjper[i],i); 
  37. }; 
  38. function peic(len,ind){ 
  39. for(var i=0;i<len;i++){ 
  40. percjcon.push(cjcon[ind]); 
  41. };  
  42. }; 
  43. var sjmes = document.getElementById("sjmes"); 
  44. var numrandom=Math.floor(Math.random()*percjcon.length); 
  45. sjmes.innerHTML=percjcon[numrandom]; 
  46.  
  47. var opacityb=0.5;//透明百分比,参考值,什么程度出现提示 
  48. var backcolorb="#ffaaaa"
  49. var numl=200*80;//总像素个数 
  50. var nump;//出现backcolorb的个数 
  51. var opacitya;//透明百分比实际值 
  52.  
  53. var canvas = document.getElementById("canvas"); //获取canvas  
  54. var context = canvas.getContext('2d'); //canvas追加2d画图 
  55. var flag = 0; //标志,判断是按下后移动还是未按下移动 重要 
  56. var penwidth=20; //画笔宽度 
  57. context.fillStyle="#faa"//填充的颜色 
  58. context.fillRect(0,0,200,80); //填充颜色 x y坐标 宽 高 
  59.  
  60. canvas.addEventListener('mousemove', onMouseMove, false); //鼠标移动事件  
  61. canvas.addEventListener('mousedown', onMouseDown, false); //鼠标按下事件  
  62. canvas.addEventListener('mouseup', onMouseUp, false); //鼠标抬起事件  
  63. var movex=-1; 
  64. var movey=-1; 
  65. var imgData;//imagedada容器 
  66. var rgbabox=[];//存放读取后的rgba数据; 
  67. function onMouseMove(evt) { 
  68. if (flag == 1) {  
  69. movex=evt.layerX; 
  70. movey=evt.layerY;  
  71. context.fillStyle="#FF0000"
  72. context.beginPath(); 
  73. context.globalCompositeOperation="destination-out"
  74. context.arc(movex,movey,penwidth,0,Math.PI*2,true); //Math.PI*2是JS计算方法,是圆  
  75. context.closePath(); 
  76. context.fill(); 
  77. }  
  78. }  
  79. function onMouseDown(evt) {  
  80. flag = 1; //标志按下 
  81. }  
  82. function onMouseUp(evt) {  
  83. flag = 0; 
  84. //读取像素数据 
  85. imgData=context.getImageData(0,0,200,80);//获取当前画布数据 
  86. //imgData.data.length 获取图片数据总长度,没4个为一组存放rgba 
  87. for(var i=0; i<imgData.data.length;i+=4){ 
  88. var rval=imgData.data[i]; 
  89. var gval=imgData.data[i+1]; 
  90. var bval=imgData.data[i+2]; 
  91. var aval=imgData.data[i+3]; 
  92. var rgbaval=rval+"-"+gval+"-"+bval+"-"+aval; 
  93. rgbabox.push(rgbaval); 
  94. //end 
  95. for(var j=0;j<rgbabox.length;j++){ 
  96. //alert(rgbabox[j].split("-")[0]) 
  97. rgbabox[j]='#'+rgbToHex(rgbabox[j].split("-")[0],rgbabox[j].split("-")[1],rgbabox[j].split("-")[2]);  
  98. nump=countSubstr(rgbabox.join(","),backcolorb,true); 
  99. opacitya=(numl-nump)/numl; 
  100. if(opacitya>opacityb){ 
  101. alert("恭喜你获得"+percjcon[numrandom]) 
  102. }else{} 
  103.  
  104. }  
  105. function rgbToHex(r, g, b) { return ((r << 16) | (g << 8) | b).toString(16); }//rgb转为16进制 #xxx形式 
  106. function countSubstr(str,substr,isIgnore){//计算字符串出现子字符串的个数 
  107. var count; 
  108. var reg=""
  109. if(isIgnore==true){ 
  110. reg="/"+substr+"/gi";  
  111. }else
  112. reg="/"+substr+"/g"
  113. reg=eval(reg); 
  114. if(str.match(reg)==null){ 
  115. count=0; 
  116. }else
  117. count=str.match(reg).length; 
  118. return count; 
  119. //end 
  120. </script> 
  121. </html> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选