canvas 绘制星座图(好玩)--转载
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>canvas星座</title>
<style>
* {
margin: 0;
padding: 0;
}
#box{
margin:10px 0 0 10px;;
}
input{
outline: none;
font-size:16px;
}
p{
margin-bottom: 10px
}
input[type=date]{
height:36px;
text-indent:10px;
}
input[type=button]{
background:#3A92FF;
color:white;
border: none;
height:40px;
padding:0 10px;
margin-left: -2px;
}
#canvas{
margin-left:10px;
background-color: #000;
display: none;
}
</style>
</head>
<body>
<div id="box">
<p>请选择您的出生日期</p>
<input type="date" id="birth"><input type="button" id="btn" value="展示我的星空图">
</div>
<canvas id="canvas" width="550" height="550">你的浏览器不支持canvas</canvas>
<script type="text/javascript">
var box=document.getElementById('box');
var birth=document.getElementById('birth');
var btn=document.getElementById('btn');
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var g1,date,timer;
ctx.font = "30px Courier New";
/*星座位置*/
var star={
"白羊座":[
[[0.30,0.78],[0.34,0.66],[0.28,0.48],[0.60,0.26],[0.65,0.20],[0.71,0.23],[0.70,0.32],[0.72,0.36]],
[ [0,1,2,3,4,5],[3,6,7]]
],
"天秤座":[
[[0.16,0.67],[0.34,0.60],[0.60,0.27],[0.75,0.23],[0.84,0.47],[0.63,0.74],[0.51,0.78]],
[[0,1,2,3,4,5,6]]
],
"摩羯座":[
[[0.78,0.21],[0.78,0.34],[0.75,0.45],[0.75,0.70],[0.69,0.78],[0.31,0.66],[0.22,0.49],[0.30,0.53],[0.53,0.54]],
[[0,1,2,3,4,5,6,7,8,1]]
],
"水瓶座":[
[[0.45,0.21],[0.37,0.35],[0.27,0.51],[0.30,0.58],[0.29,0.64],[0.48,0.79],[0.51,0.71],[0.58,0.68],[0.73,0.74],[0.43,0.53],[0.53,0.47]],
[[0,1,2,3,4,5,6,7,8],[2,9,10]]
],
"双鱼座":[
[[0.28,0.43],[0.28,0.53],[0.36,0.73],[0.43,0.78],[0.50,0.70],[0.53,0.62],[0.57,0.58],[0.63,0.43],[0.67,0.39],[0.74,0.39],[0.77,0.34],[0.72,0.30],[0.75,0.22],[0.23,0.50],[0.66,0.33]],
[[0,1,2,3,4,5,6,7,8,9,10,11,12],[0,13,1],[8,14,11]]
],
"金牛座":[
[[0.29,0.21],[0.39,0.36],[0.50,0.51],[0.50,0.57],[0.61,0.63],[0.77,0.71],[0.79,0.79],[0.22,0.43],[0.39,0.57],[0.60,0.71],[0.67,0.76]],
[[0,1,2,3,4,5,6],[7,8,3],[4,9,10]]
],
"双子座":[
[[0.18,0.37],[0.25,0.45],[0.35,0.55],[0.39,0.68],[0.49,0.77],[0.51,0.63],[0.57,0.78],[0.28,0.29],[0.42,0.32],[0.61,0.49],[0.72,0.60],[0.83,0.59],[0.69,0.75],[0.22,0.54],[0.35,0.43],[0.48,0.21]],
[[0,1,2,3,4],[2,5,6],[7,8,9,10,11],[9,12],[13,1,14,8,15]]
],
"巨蟹座":[
[ [0.16,0.39],[0.27,0.36],[0.52,0.49],[0.57,0.65],[0.83,0.78],[0.44,0.21]],
[[0,1,2,3,4],[2,5]]
],
"狮子座":[
[
[0.16,0.75],[0.23,0.67],[0.39,0.77],[0.71,0.53],[0.64,0.39],[0.55,0.37],[0.47,0.27],[0.54,0.24],[0.60,0.27],[0.85,0.56]],
[[0,1,2,3,4,5,6,7,8],[3,9]]
],
"处女座":[
[[0.16,0.59],[0.35,0.63],[0.44,0.70],[0.62,0.51],[0.77,0.46],[0.84,0.37],[0.60,0.42],[0.65,0.26],[0.34,0.75]],
[[0,1,2,3,4,5],[3,6,7],[2,8]]
],
"天蝎座":[
[[0.17,0.50],[0.28,0.63],[0.19,0.70],[0.28,0.78],[0.41,0.77],[0.49,0.72],[0.57,0.55],[0.59,0.44],[0.69,0.31],[0.74,0.21],[0.82,0.29],[0.79,0.44],[0.73,0.50],[0.38,0.47]],
[[0,1,2,3,4,5,6,7,8,9,10,11,12],[1,13],[8,11]]
],
"射手座":[
[[0.22, 0.66],[0.24,0.51],[0.45,0.40],[0.54,0.37],[0.59,0.43],[0.66,0.50],[0.63,0.60],[0.66,0.67],[0.74,0.53],[0.77,0.39],[0.49,0.47],[0.29,0.68],[0.30,0.78],[0.48,0.21],[0.52,0.27],[0.59,0.29]],
[[0,1,2,3,4,5,6,7,8,9],[2,10,11,12],[10,4],[13,14,15,3],[14,3]]
]
};
/*根据出生日期获取星座信息*/
function getStarSign(ts){
var d=new Date(ts),sign=d.getMonth()*100+d.getDate();
switch(true)
{
case sign<20:
return "摩羯座";
case sign<119:
return "水瓶座";
case sign<221:
return "双鱼座";
case sign<320:
return "白羊座";
case sign<421:
return "金牛座";
case sign<522:
return "双子座";
case sign<623:
return "巨蟹座";
case sign<723:
return "狮子座";
case sign<823:
return "处女座";
case sign<923:
return "天秤座";
case sign<1022:
return "天蝎座";
case sign<1122:
return "射手座";
default:
return "摩羯座";
}
}
/*绘制星座*/
function constellation(ctx,ary,w,h){
/*创建线条*/
var points=ary[0], lines=ary[1];
ctx.strokeStyle="#FFF";
var len=lines.length,i,ii,line,point;
ctx.beginPath();
while(len--)
{
i=1;
line=lines[len];
ii=line.length;
point=points[line[0]];
ctx.moveTo(point[0]*w,point[1]*h);
for(;i<ii;i++){
point=points[line[i]];
ctx.lineTo(point[0]*w,point[1]*h);
}
}
ctx.stroke();
/*创建小圆*/
var cur;
i=0;
ii=points.length;
for(;i<ii;i++){
cur=points[i];
new Circle(cur[0]*w,cur[1]*h).draw();//new出实例
}
}
/*创建小圆的构造函数*/
function Circle(x,y,r){
this.x=x;
this.y=y;
this.r=r||Math.round(Math.random()*8+4);
}
Circle.prototype={
draw:function(){
ctx.beginPath();
g1=ctx.createRadialGradient(this.x,this.y,Math.round(Math.random()*1+1),this.x,this.y,Math.round(Math.random()*3+6));
g1.addColorStop(0,'rgba(255,255,255,.9)');
g1.addColorStop(1,'rgba(0,0,0,.1)');
ctx.arc(this.x,this.y,this.r,0,Math.PI*2,true);
ctx.fillStyle =g1;
ctx.closePath();
ctx.fill();
return this;
}};
/*点击‘展示我的星空图’按钮*/
btn.onclick=function(e){
clearInterval(timer);
e.preventDefault();
if (!birth.value){
alert("请选择您的出生日期");
}else{
canvas.style.display="block";
date = new Date(birth.value.replace(/-/g,'/')).getTime();
timer=setInterval(function(){
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.strokeText(getStarSign(date), 50, 50);
constellation(ctx,star[getStarSign(date)],canvas.width,canvas.height);
},500);
}
};
</script>
</body>
</html>
canvas 绘制星座图(好玩)--转载的更多相关文章
- 用canvas绘制折线图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用Canvas绘制背景图
原文 http://www.imququ.com/post/use-canvas-as-background-image.html 最近iCloud Web的Beta版换了UI,整体风格变得和iOS ...
- Android自己定义组件系列【9】——Canvas绘制折线图
有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了非常多插件,可是非常多时候我们须要依据详细项目自己定义这些图表,这一篇文章我们一起来看看怎样在Android中使用Can ...
- Android自定义控件 -Canvas绘制折线图(实现动态报表效果)
有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas ...
- Android自定义组件系列【9】——Canvas绘制折线图
有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas ...
- canvas 绘制八卦图
绘制要点: 1.getContext('2d'); -->绘图环境,2维空间 2.fillRect(x,y,w,h); -->矩形:实心(黑色背景) 3.strokeRect(x,y,w, ...
- 使用canvas绘制扇形图
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- canvas绘制折线图(仿echarts)
遇到的问题:Retina屏上字体线条模糊问题 解决方案:放大canvas的大小,然后用css压缩回原大小,例如:想要900*400的画布,先将画布设置为 width="1800px" ...
- canvas绘制折线图
效果图: 重难点: 1.画布左上角的顶点的坐标为(0 ,0),右下角的坐标最大,与平常思维相反 2.数据的处理 html代码: <!DOCTYPE html><html lang=& ...
随机推荐
- 【第九周】beta-review阶段贡献分分配
组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 武志远 武志远 武志远 武志远 武志远 宫成荣 宫成荣 杨柳 宫成荣 宫成荣 李峤 杨柳 李峤 ...
- 【beta】Scrum站立会议第6次....11.8
小组名称:nice! 组长:李权 成员:于淼 刘芳芳韩媛媛 宫丽君 项目内容:约跑app(约吧) 时间:2016.11.8 12:00——12:30 地点:传媒西楼220室 本次对beta阶段 ...
- eclipse生成jar包 注意事项!
原文转自:http://www.cnblogs.com/zhangfei/archive/2013/01/22/2871075.html 第一:普通类导出jar包,我说的普通类就是指此类包含main方 ...
- [转帖]IBM收购Red Hat
来源cnbeta:https://www.cnbeta.com/articles/tech/782009.htm 2018年10月28 日,IBM 宣布收购 Linux 巨头 Red Hat.公告中称 ...
- Bootstrap-tagsinput标系统使用心得
最近工作中由于需求使用到了Bootstrap-tagsinput标系统,我的需求是: 1)能够从后台数据库获取标签信息展示到前端页面: 2)能够实现输入标签添加到后台,并ajax刷新页面: 3)能够实 ...
- PHP中普通属性和静态属性
普通属性(实例属性): 实例的单词为:instance 实例,其实也叫做“对象”: 普通(实例)属性,就是一个可以在该类实例化出的对象上使用的属性! 定义形式: class 类名{ var $属性 ...
- 使用nginx反向代理时,如何正确获取到用户的真实ip
在记录日志的的时候,获取用户的信息,比如用户的ip,浏览器等等信息是十分重要的. 但是在使用nginx反向代理的时候,可能经过转发无法获取到用户的真实的ip, 在此情况下需要配置nginx,让其在转发 ...
- 利用css3的text-shadow属性实现文字阴影乳白效果
现在CSS3+html5的网页应用的越来越广泛了.很多网页中的字体同样可以用CSS3来实现炫酷的效果. 下面就介绍一下利用css3的text-shadow属性实现文字阴影乳白效果.这是在设计达人上面看 ...
- 第194天:js---函数对象详解(arguments、length)
一.函数即对象 function add1(a,b){ return a+b; } //Function对象的实例 -- 高级技巧 --- 写框架必须用的... //前面表示参数,后面表示函数语句 v ...
- 【Python】Python发展历史
起源 Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣.用他 ...