使用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. 一、Dapper基本操作

    参考资料:Cooper Liu 毒逆天 一.Dapper安装 添加引用-->NuGet管理-->搜索Dapper-->安装 二.新建表 --创建一个员工表 create table ...

  2. 学习笔记_TCP编程,服务端

    public void startTcpService(String ip) { try { InetAddress ipAddress = InetAddress.getByName(ip); tc ...

  3. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程

    简介 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输 ...

  4. Verilog三线 - 八线译码器

    参阅了一些书籍和网上的写法,在此Mark. 布尔表达式法 module decode3_8_assign (data_in,data_out,enable);//算法实现 :] data_in; in ...

  5. python从字符串中提取数字,使用正则表达式

    使用正则表达式 import re D = re.findall(r"\d+\.?\d*",line) print(D) -7.23246 10.8959 5.19534 0.06 ...

  6. vs2008使用mysql链接错误

    原因是因为安装了64位的mysql,而开发工具室32位的,需要安装32位的开发库就可以了

  7. 使用ABAP(ADBC)和Java(JDBC)连接SAP HANA数据库

    在表DBCON里维护一条记录,指向HANA数据库.con_ENV里填入HANA数据库的主机名和端口号.如vmXXXX:30015 DATA: ls_new TYPE DBCON. ls_new-con ...

  8. 【JavaScript 封装库】BETA 3.0 测试版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  9. fluent Python

    1.1 Python风格的纸牌 Python collections模块中的内置模块:namedtuple https://www.liaoxuefeng.com/wiki/0013747381250 ...

  10. 实现接口Controller定义控制器

    实现接口Controller定义控制器 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含 ...