canvas实现十二星座星空图


Posted in Javascript onFebruary 14, 2017

效果如下:

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>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
validator验证控件使用代码
Nov 23 Javascript
jquery清空textarea等输入框实现代码
Apr 22 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 Javascript
浅谈javascript事件取消和阻止冒泡
May 26 Javascript
jquery实现倒计时效果
Dec 14 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
shiro授权的实现原理
Sep 21 Javascript
基于JavaScript实现前端数据多条件筛选功能
Aug 19 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
基于jquery.page.js实现分页效果
Jan 01 jQuery
详解AngularJS之$window窗口对象
Jan 17 Javascript
JavaScript setInterval()与setTimeout()计时器
Dec 27 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 #Javascript
jqGrid翻页时数据选中丢失问题的解决办法
Feb 13 #Javascript
jQuery实现用户输入自动完成功能
Feb 13 #Javascript
微信小程序 详解页面跳转与返回并回传数据
Feb 13 #Javascript
微信小程序 this和that详解及简单实例
Feb 13 #Javascript
脚本div实现拖放功能(两种)
Feb 13 #Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 #Javascript
You might like
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php UBB 解析实现代码
2011/11/27 PHP
PHP编码转换
2012/11/05 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js数组操作常用方法
2014/05/08 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Pygame框架实现飞机大战
2020/08/07 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
退休感言
2014/01/28 职场文书
个人自我评价范文
2014/02/05 职场文书
环保倡议书500字
2014/05/15 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
禁毒主题班会教案
2015/08/14 职场文书
人民调解协议书
2016/03/21 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js