HTML5 canvas 圆盘抽奖


使用html5 canvas 绘制的圆盘抽奖程序

效果图:

贴上全部代码:  1 <!DOCTYPE html>

 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>圆盘抽奖</title>
 6 <style>
 7 *.{margin:0;padding:0;}
 8 
 9 #bg{position:absolute;left:200;top:200;}
 10 #container{width:400px;margin:150px auto;};  11 
 12 </style>
 13 </head>
 14 <body>
 15 
 16 <div id="container">
 17 <canvas id='bg'></canvas>
 18 </div>
 19 
 20 
 21 </div>
 22 
 23 <script type="text/javascript">
 24 var fillStyle = ['rgb(255,154,0)','rgb(210,92,4)','rgb(255,154,0)','rgb(210,92,4)','rgb(255,154,0)','rgb(210,92,4)']  25  ,fillText = ['一等奖','二等奖','三等奖','四等奖','五等奖','六等奖']  26  ,width = 400
 27  ,height = 400
 28  ,c_x = 200
 29  ,c_y =200
 30  ,radius = 200 // 圆盘半径
 31  ,canvas = document.getElementById('bg')  32  ,index =0
 33  ,timer = null
 34  ,running = false // 是否运行中
 35  ,speed = 300 // 速度
 36  ,isBeginPrize = false // 是否开始抽奖
 37  ,stepping=0 // 步数,经过一个扇形为1步
 38  ,basecircle = 3 // 点击开始时,圆盘旋转的圈数,旋转玩指定圈数之后,再根据selected的值确定奖项
 39  ,selected =4; // 最终选中第几个扇形,也就是确定几等奖  40 function setup(){  41  drawCircle(false);  42 }  43 function drawCircle(isRunning){  44     var deg = Math.PI/180;
 45     var startAngle = 0;  46     var endAngle = 60;  47  canvas.height = height;  48  canvas.width = width;  49     var ctx=canvas.getContext('2d');  50     for(var i=0;i<6;i++){  51  ctx.beginPath();  52         
 53         // 正在运行的时候,改变当前扇形的颜色
 54         if(isRunning && index==i)  55  {  56  ctx.fillStyle = 'rgb(255,248,51)';  57  }  58         else
 59  {  60  ctx.fillStyle = fillStyle[i];  61  }  62         
 63         // 绘制扇形
 64  ctx.moveTo(c_x,c_y);  65  ctx.arc(c_x,c_y,radius,deg*startAngle,deg*endAngle,false);  66  ctx.fill();  67         
 68         // 绘制扇形上的文字
 69  ctx.font="14px Microsoft YaHei";  70  ctx.fillStyle = '#000';  71  ctx.textAlign = "center";  72  ctx.fillText(fillText[i],200+Math.cos(deg*(startAngle+30))*150,200+Math.sin(deg*(startAngle+30))*150);  73  startAngle +=60;  74  endAngle +=60;  75  }  76 
 77         
 78         // 绘制中心圆
 79  ctx.beginPath();  80  ctx.arc(200,200,100,0,2*Math.PI,1);  81  ctx.fillStyle = 'rgb(255,255,255)';  82  ctx.fill();  83     
 84         // 绘制中心圆
 85  ctx.font="30px Microsoft YaHei";  86         // 创建渐变
 87         var gradient=ctx.createLinearGradient(0,0,width,0);  88  gradient.addColorStop("0","magenta");  89  gradient.addColorStop("0.2","blue");  90  gradient.addColorStop("0.8","red");  91         // 用渐变填色
 92  ctx.textAlign = "center";  93  ctx.fillStyle=gradient;  94  ctx.fillText("开始",200,200+10);  95         
 96         // 绘制中心园边框
 97  ctx.strokeStyle = 'rgb(148,28,27)';  98  ctx.lineWidth = 6;  99  ctx.stroke(); 100 } 101 
102 
103 function rotate(){ 104     if(stepping==4){ // 4步之后开始加速
105  clearTimer(); 106  speed = 100; 107  timer = setInterval(rotate,speed); 108  } 109 
110     if(basecircle>0 && index ==6){ // 基本圈数借宿以后,开始随机抽奖
111  index = 0; 112  basecircle--; 113         if(basecircle == 0) // 开始随机抽奖
114  { 115  clearTimer(); 116  speed = 300; 117  timer = setInterval(rotate,speed); 118  isBeginPrize = true; 119  } 120  } 121     
122     if(isBeginPrize && selected > 0) // 开始抽奖
123  { 124         if(--selected == 0) //到了选择的奖项之后
125  { 126  clearTimer(); 127  isStop = true; 128  } 129         else
130  { 131  clearTimer(); 132  speed += 100; 133  timer = setInterval(rotate,speed); 134  } 135         
136  } 137     
138     
139  drawCircle(true); 140  index++; 141  stepping++; 142 } 143 
144 // 初始化抽奖参数
145 function init() 146 { 147  basecircle = 3; 148  selected = 4; 149     
150  running= false; 151  isBeginPrize = false; 152     
153  index = 0; 154  stepping = 0; 155  speed = 300; 156     
157 } 158 
159 function mouseDown_Start(e){ 160     
161     
162     
163     var local = getPointOnCanvas(canvas, e.pageX, e.pageY); 164 
165     if(local.x > 100 && local.x < 300 && local.y>100 && local.y<300) // 中心圆区域
166  { 167     
168         if(running){ 169             return; 170  } 171  init(); 172         
173  timer = setInterval(rotate,speed); 174  } 175 } 176 
177 
178 function clearTimer(){ 179  clearInterval(timer); 180  timer = null; 181 } 182 
183 function getPointOnCanvas(canvas, x, y) { 184 
185     var bbox =canvas.getBoundingClientRect(); 186 
187     return { x:x- bbox.left *(canvas.width / bbox.width), 188 
189  y:y - bbox.top * (canvas.height / bbox.height) 190 
191  }; 192 
193 } 194 
195 setup(); 196 
197 canvas.addEventListener("mousedown",mouseDown_Start,false); 198 </script>
199 </body>
200 </html>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM