国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

javascript+canvas實(shí)現(xiàn)刮刮卡抽獎(jiǎng)效果

2024-05-06 16:23:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了javascript+canvas實(shí)現(xiàn)刮刮卡抽獎(jiǎng)效果的相關(guān)資料,需要的朋友可以參考下

運(yùn)用canvas做的簡(jiǎn)單刮刮卡效果,每次刷新可重新測(cè)試

 

 
  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>刮刮卡簡(jiǎn)單抽獎(jiǎng)</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=["一等獎(jiǎng)","二等獎(jiǎng)","三等獎(jiǎng)","謝謝參與"];//獎(jiǎng)項(xiàng)設(shè)置 
  28. var cjper=[3,10,20,100];//獎(jiǎng)項(xiàng)率,次數(shù) 
  29. /* 
  30. * sjmes 
  31. * @Author 透筆度(1530341234@qq.com)  
  32. * @param {cjcon} 所有獎(jiǎng)項(xiàng)  
  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;//透明百分比,參考值,什么程度出現(xiàn)提示 
  48. var backcolorb="#ffaaaa"
  49. var numl=200*80;//總像素個(gè)數(shù) 
  50. var nump;//出現(xiàn)backcolorb的個(gè)數(shù) 
  51. var opacitya;//透明百分比實(shí)際值 
  52.  
  53. var canvas = document.getElementById("canvas"); //獲取canvas  
  54. var context = canvas.getContext('2d'); //canvas追加2d畫圖 
  55. var flag = 0; //標(biāo)志,判斷是按下后移動(dòng)還是未按下移動(dòng) 重要 
  56. var penwidth=20; //畫筆寬度 
  57. context.fillStyle="#faa"//填充的顏色 
  58. context.fillRect(0,0,200,80); //填充顏色 x y坐標(biāo) 寬 高 
  59.  
  60. canvas.addEventListener('mousemove', onMouseMove, false); //鼠標(biāo)移動(dòng)事件  
  61. canvas.addEventListener('mousedown', onMouseDown, false); //鼠標(biāo)按下事件  
  62. canvas.addEventListener('mouseup', onMouseUp, false); //鼠標(biāo)抬起事件  
  63. var movex=-1; 
  64. var movey=-1; 
  65. var imgData;//imagedada容器 
  66. var rgbabox=[];//存放讀取后的rgba數(shù)據(jù); 
  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計(jì)算方法,是圓  
  75. context.closePath(); 
  76. context.fill(); 
  77. }  
  78. }  
  79. function onMouseDown(evt) {  
  80. flag = 1; //標(biāo)志按下 
  81. }  
  82. function onMouseUp(evt) {  
  83. flag = 0; 
  84. //讀取像素?cái)?shù)據(jù) 
  85. imgData=context.getImageData(0,0,200,80);//獲取當(dāng)前畫布數(shù)據(jù) 
  86. //imgData.data.length 獲取圖片數(shù)據(jù)總長(zhǎng)度,沒4個(gè)為一組存放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轉(zhuǎn)為16進(jìn)制 #xxx形式 
  106. function countSubstr(str,substr,isIgnore){//計(jì)算字符串出現(xiàn)子字符串的個(gè)數(shù) 
  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> 

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 长沙市| 南皮县| 贵阳市| 尖扎县| 巴彦县| 临沧市| 乃东县| 隆安县| 弋阳县| 彭水| 图们市| 杭锦旗| 兴海县| 金山区| 吴江市| 衡阳县| 广德县| 沁阳市| 博湖县| 馆陶县| 苏尼特右旗| 通辽市| 镇宁| 仁布县| 罗定市| 嵊州市| 石景山区| 汕尾市| 兴城市| 博湖县| 资兴市| 白沙| 原阳县| 昌江| 库伦旗| 澳门| 罗城| 青龙| 格尔木市| 达日县| 吉首市|