<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>html5圆形抽奖 - zkeyword.com</title> </head> <body> <canvas id="canvas" style="border:1px solid #ddd"></canvas> </body> <script> var lottery = (function(){ var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'), width = 400, height = 400, x = 200, y = 200, color = ['#a00','#0a0','#00a','#aa0','#a16','#0aa','#a5a','#f31','#784','#a43','#34a','#786'], deg = Math.PI / 180, isClick = true, startTimer = null, shopTimer = null, i = 0, len = 12 speed = 340; canvas.width = width; canvas.height = height; var core = { init: function(i){ core.bg(); core.proint(i); core.btn(); }, bg: function(){ var i = 0; ctx.save(); for(; i < len; i++){ ctx.beginPath(); ctx.fillStyle = color[i]; ctx.moveTo(x, y); ctx.arc(x, y, 180, deg * i * 30, deg * (i+1) * 30); ctx.fill(); ctx.closePath(); } ctx.restore(); }, proint: function(i){ ctx.save(); ctx.beginPath(); ctx.fillStyle = '#333'; ctx.moveTo(x, y); ctx.arc(x, y, 180, deg * i * 30, deg * (i+1) * 30); ctx.fill(); ctx.closePath(); ctx.restore(); }, btn: function(){ ctx.beginPath(); ctx.fillStyle = '#555'; ctx.arc(x, y, 50, 0, Math.PI*2); ctx.fill(); ctx.closePath(); ctx.restore(); },www.111cn.net clear: function(){ ctx.clearRect(0, 0, 250, 250); }, /*开始加速*/ start: function(){ i = (i === 12) ? 0 : i; speed = (speed !== 100) ? (speed - 20) : 100; startTimer = setTimeout(function(){ core.start(); }, speed); core.clear(); core.init(i); i++; isClick = false; }, /*匀速运动,指定指针*/ move: function(h){ var val = 12 - Math.abs(h + 1 - i); if( startTimer ) clearTimeout(startTimer); if( val !== 12 ){ i = (i === 12) ? 0 : i; var timer = setTimeout(function(){ core.move(h); }, speed); core.clear(); core.init(i); i++; }else{ core.stop(); } }, /*停止减速*/ stop: function(){ if( speed !== 340 ){ i = (i === 12) ? 0 : i; speed += 20; shopTimer = setTimeout(function(){ core.stop(); }, speed); core.clear(); core.init(i); i++; }else{ if( shopTimer ) clearTimeout(shopTimer); core.callback(i); i = 0; isClick = true; } }, callback: function(i){ console.log(i,'中奖了') }, random: function(min, max){ return Math.floor(min + Math.random()*(max-min)); }, /*抽奖,概率算法*/ lottery: function(){ var s = core.random(1, 10), y = core.random(1, 1000); if( s === 1 ){ core.move(1); }else if( y === 1 ){ core.move(1); }else{ core.move(0); } console.log(s, y) } }; core.init(0); canvas.onclick = function(e){ if( isClick ){ core.start(); setTimeout(function(){ core.lottery(); }, 5000); } //else if( !isClick && speed === 100 ){ //} } })(); </script> </html> |