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

效果图:

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

 <html>
<head>
<meta charset="UTF-8">
<title>圆盘抽奖</title>
<style>
*.{margin:0;padding:0;} #bg{position:absolute;left:200;top:200;}
#container{width:400px;margin:150px auto;}; </style>
</head>
<body> <div id="container">
<canvas id='bg'></canvas>
</div> </div> <script type="text/javascript">
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)']
,fillText = ['一等奖','二等奖','三等奖','四等奖','五等奖','六等奖']
,width = 400
,height = 400
,c_x = 200
,c_y =200
,radius = 200 // 圆盘半径
,canvas = document.getElementById('bg')
,index =0
,timer = null
,running = false // 是否运行中
,speed = 300 // 速度
,isBeginPrize = false // 是否开始抽奖
,stepping=0 // 步数,经过一个扇形为1步
,basecircle = 3 // 点击开始时,圆盘旋转的圈数,旋转玩指定圈数之后,再根据selected的值确定奖项
,selected =4; // 最终选中第几个扇形,也就是确定几等奖
function setup(){
drawCircle(false);
}
function drawCircle(isRunning){
var deg = Math.PI/180;
var startAngle = 0;
var endAngle = 60;
canvas.height = height;
canvas.width = width;
var ctx=canvas.getContext('2d');
for(var i=0;i<6;i++){
ctx.beginPath(); // 正在运行的时候,改变当前扇形的颜色
if(isRunning && index==i)
{
ctx.fillStyle = 'rgb(255,248,51)';
}
else
{
ctx.fillStyle = fillStyle[i];
} // 绘制扇形
ctx.moveTo(c_x,c_y);
ctx.arc(c_x,c_y,radius,deg*startAngle,deg*endAngle,false);
ctx.fill(); // 绘制扇形上的文字
ctx.font="14px Microsoft YaHei";
ctx.fillStyle = '#000';
ctx.textAlign = "center";
ctx.fillText(fillText[i],200+Math.cos(deg*(startAngle+30))*150,200+Math.sin(deg*(startAngle+30))*150);
startAngle +=60;
endAngle +=60;
} // 绘制中心圆
ctx.beginPath();
ctx.arc(200,200,100,0,2*Math.PI,1);
ctx.fillStyle = 'rgb(255,255,255)';
ctx.fill(); // 绘制中心圆
ctx.font="30px Microsoft YaHei";
// 创建渐变
var gradient=ctx.createLinearGradient(0,0,width,0);
gradient.addColorStop("0","magenta");
gradient.addColorStop("0.2","blue");
gradient.addColorStop("0.8","red");
// 用渐变填色
ctx.textAlign = "center";
ctx.fillStyle=gradient;
ctx.fillText("开始",200,200+10); // 绘制中心园边框
ctx.strokeStyle = 'rgb(148,28,27)';
ctx.lineWidth = 6;
ctx.stroke();
} function rotate(){
if(stepping==4){ // 4步之后开始加速
clearTimer();
speed = 100;
timer = setInterval(rotate,speed);
} if(basecircle>0 && index ==6){ // 基本圈数借宿以后,开始随机抽奖
index = 0;
basecircle--;
if(basecircle == 0) // 开始随机抽奖
{
clearTimer();
speed = 300;
timer = setInterval(rotate,speed);
isBeginPrize = true;
}
} if(isBeginPrize && selected > 0) // 开始抽奖
{
if(--selected == 0) //到了选择的奖项之后
{
clearTimer();
isStop = true;
}
else
{
clearTimer();
speed += 100;
timer = setInterval(rotate,speed);
} } drawCircle(true);
index++;
stepping++;
} // 初始化抽奖参数
function init()
{
basecircle = 3;
selected = 4; running= false;
isBeginPrize = false; index = 0;
stepping = 0;
speed = 300; } function mouseDown_Start(e){ var local = getPointOnCanvas(canvas, e.pageX, e.pageY); if(local.x > 100 && local.x < 300 && local.y>100 && local.y<300) // 中心圆区域
{ if(running){
return;
}
init(); timer = setInterval(rotate,speed);
}
} function clearTimer(){
clearInterval(timer);
timer = null;
} function getPointOnCanvas(canvas, x, y) { var bbox =canvas.getBoundingClientRect(); return { x:x- bbox.left *(canvas.width / bbox.width), y:y - bbox.top * (canvas.height / bbox.height) }; } setup(); canvas.addEventListener("mousedown",mouseDown_Start,false);
</script>
</body>
</html>

HTML5 canvas 圆盘抽奖的更多相关文章

  1. HTML5 Canvas圆盘抽奖应用(适用于Vue项目)

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  2. html5 canvas 圆形抽奖的实例

    年底没啥,抽空学习了canvas,写了个html5抽奖的代码,造了个轮子,有用的童鞋可以拿走. 其中,canvas.onclick触发抽奖行为,概率可以在core.lottery()函数上添加,美化也 ...

  3. HTML5 Canvas绘制转盘抽奖

    新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...

  4. canvas转盘抽奖

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" ...

  5. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

  6. 赠书:HTML5 Canvas 2d 编程必读的两本经典

    赠书:HTML5 Canvas 2d 编程必读的两本经典 这两年多一直在和HTML5 Canvas 打交道,也带领团队开发了世界首款基于HTML5 Canvas 的演示文档工具---AxeSlide( ...

  7. 如何开发一个简单的HTML5 Canvas 小游戏

    原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...

  8. html5 canvas常用api总结(一)

    1.监听浏览器加载事件. window.addEventListener("load",eventWindowLoaded,false); load事件在html页面加载结束时发生 ...

  9. html5 canvas首屏自适应背景动画循环效果代码

    模板描述:html5 canvas首屏自适应背景动画循环效果代码 由于动态图太大,怕以后服务器受不了,所以现在都改为静态图了,大家点击演示地址一样的,希望大家喜欢,你们的支持就是小海的动力!! 欢迎大 ...

随机推荐

  1. [RabbitMQ]Windows环境下rabbitmqclt(Command Line Tools)出现Erlang distribution failed错误的解决方法

    摘要 当使用rabbitmqctl时出现Erlang distribution failed,把%SystemRoot%Windows\System32\config\systemprofile下的. ...

  2. <Android 基础(七)> DrawerLayout and NavigationView

    介绍 DrawerLayout是Support Library包中实现了侧滑菜单效果的控件 android.support.v4.widget.DrawerLayout NavigationView是 ...

  3. 微软RPC技术学习小结

    RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种.由于这项技术在自己所在项目(Window ...

  4. selenium googleDrive

    http://chromedriver.storage.googleapis.com/index.html?path=2.1/下载地址 把googledriver.exe 放到google浏览器下目录 ...

  5. 由Asp.Net客户端控件生成的服务器端控件

    由Asp.Net客户端控件生成的服务器端控件(也就是给客户端控件添加 runnat="server"),这样的控件既能在js中通过id命.类名获取到,也能在服务器端根据id获取到

  6. 域名指向新的服务器IP后不能访问的解决办法

    不能访问是因为本地DNS缓存,缓存清除方法:dos命令窗口输入ipconfig/flushdns ,回车即可.

  7. TP5.0: 显示错误信息

    在TP5中,我们运行的代码有错误无法执行时,只显示页面错误,而不显示错误信息 对我我来讲是无法接受滴!!毕竟我还是个小渣渣,查看了百度,解决方案是: 在application/config,php中找 ...

  8. POJ-3190 Stall Reservations---优先队列+贪心

    题目链接: https://vjudge.net/problem/POJ-3190 题目大意: 有N头奶牛,每头奶牛都会在[1,1000000]的时间区间内的子区间进行挤奶.挤奶的时候奶牛一定要单独放 ...

  9. 【CCPC-Wannafly Winter Camp Day4 (Div1) G】置置置换(动态规划)

    点此看题面 大致题意: 求出有多少个长度为\(n\)的排列满足对于奇数位\(a_{i-1}<a_i\),对于偶数位\(a_{i-1}>a_i\). 考虑打表? 考虑每次只有一个数\(n\) ...

  10. 【转】VMware虚拟机系统无法上网怎么办?

    有很多用户通过安装VMware软件来创建虚拟机系统,其中就有部分用户在创建好虚拟机系统后遇到无法上网的问题,下面PC6苹果网小编就给大家带来VMware虚拟机系统下无法上网的解决办法: 1.在虚拟机右 ...