最丑的时钟效果!js canvas时钟制作方法


Posted in Javascript onAugust 15, 2016

今日就发个丑丑的时钟,老实说 

有没有什么调试canvas的工具,老是要在浏览器刷新查看效果,好累啊~
 (┬_┬)

最丑的时钟效果!js canvas时钟制作方法

代码: 

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <style>
  body{
   background: #eee;
  }
  canvas{
   background: #fff;
  }
 </style>
</head>
<body>
 <canvas width="800" height="800">你浏览器不支持,请升级...</canvas>
 <audio id="audio" src="1.wav"></audio>
 <script>
  var oAudio=document.getElementById("audio");
  var oCas=document.getElementsByTagName("canvas")[0];
  var cas=oCas.getContext("2d");
  oAudio.ontimeupdate=function(){
   if(oAudio.currentTime>0.1){
    this.pause();
   }
  }
  /*渐变颜色*/
  var color=cas.createRadialGradient(400,400,10,400,400,200);
   color.addColorStop(0,"#f1f4f5");
   color.addColorStop(1,"#c5c6c7");
  setInterval(function(){
  oAudio.currentTime=0;
  oAudio.play();
  cas.clearRect(0,0,800,800);
  /*画圆框*/
  cas.lineWidth=3;
  cas.shadowColor="#888";
  cas.shadowOffsetX=1;
  cas.shadowOddsetY=1;
  cas.shadowBlur=5;
  cas.arc(400,400,200,0,Math.PI*2,false);
  cas.strokeStyle=color;
  cas.stroke(); 
  
  /*画圆内*/
  cas.fillStyle=color;  
  cas.fill();

  /*画时刻*/
  drawTime();
  function drawTime(){
   var len=8;
   var len1=16;
   cas.strokeStyle="#7f7f7f";
   cas.shadowOffsetX=0;
   cas.shadowOddsetY=0;
   cas.shadowBlur=0;
   cas.beginPath();
   for(var i=0;i<60;i++){
    if(i%5==0){
    cas.moveTo(400+Math.cos(i*6*Math.PI/180)*200,400+Math.sin(i*6*Math.PI/180)*200);
    cas.lineTo(400+(200-len1)*Math.cos(i*6*Math.PI/180),400+(200-len1)*Math.sin(i*6*Math.PI/180));
    }else{
    cas.moveTo(400+Math.cos(i*6*Math.PI/180)*200,400+Math.sin(i*6*Math.PI/180)*200);
    cas.lineTo(400+(200-len)*Math.cos(i*6*Math.PI/180),400+(200-len)*Math.sin(i*6*Math.PI/180));
    }
   }
   cas.stroke(); 
  }

  /*画时针*/
  
  var date=new Date();
  var h=date.getHours();
  var m=date.getMinutes();
  var s=date.getSeconds();
   /*时针*/
  needle(h*5+5*m/60,100,"#579ec5");
  /*分针*/
  needle(m,130,"#5e717c");
  /*秒针*/
  needle(s,150,"#1d1e1e");
  
  /*圆的中心点*/
  cas.fillStyle="#858384";
  cas.beginPath();
  cas.arc(400,400,5,0,2*Math.PI,true);
  cas.shadowOffsetX=1;
  cas.shadowOddsetY=1;
  cas.shadowBlur=5;
  cas.fill();
  },1000);

  /*时针的函数*/
  function needle(t,len,color){
   var angle=Math.PI/180;
   cas.beginPath();
   cas.strokeStyle=color;
   cas.moveTo(400,400);
   cas.lineTo(400+len*Math.cos((t*6-90)*angle),400+len*Math.sin((t*6-90)*angle));
   cas.stroke();
  }

 </script>
</body>
</html>

这个钟重点不在怎么画,在三角函数,三角函数的使用与角度息息相关,Math.PI是π,Math.sin(),Math.cos()它们都是接受弧度的,所以要 

把角度转换成弧度,在画钟前要先判断时钟的条件,把圆分成60份,每一份代表一个刻度,还有在圆的坐标是数学里的正方向为准的,所以 

需要把开始坐标调一下,减个90度就可以和时钟的开始位置一样了。 

在学canvas前一定要把以前遗忘的数学函数复习复习一下,不是一些复杂的算数就无法做了,canvas的学习就是坐标的不断确认的,然后连成线 

最后画成图,这与数学里的点到线,线到面一样的道理。 

上面的代码不难都是使用线条画的,就是重复的使用画线函数和填充颜色。噢~还有外加了一个声频标签使用,达到时钟的声音    滴答滴答滴答~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery取得select选择的文本与值的示例
Dec 09 Javascript
js格式化时间小结
Nov 03 Javascript
js实现的简单图片浮动效果完整实例
May 10 Javascript
JavaScript解八皇后问题的方法总结
Jun 12 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
bootstrap Table服务端处理分页(后台是.net)
Oct 19 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
JavaScript中Object基础内部方法图
Feb 05 Javascript
JavaScript引用类型Date常见用法实例分析
Aug 08 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
Aug 24 Javascript
深入分析javascript中console命令
Aug 14 #Javascript
Vue.js 表单校验插件
Aug 14 #Javascript
Vue.js学习笔记之 helloworld
Aug 14 #Javascript
详解Node.js如何开发命令行工具
Aug 14 #Javascript
javascript中的 object 和 function小结
Aug 14 #Javascript
JavaScript兼容浏览器FF/IE技巧
Aug 14 #Javascript
关于JavaScript限制字数的输入框的那些事
Aug 14 #Javascript
You might like
浅析php学习的路线图
2013/07/10 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python实现二分查找算法实例
2015/05/26 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
书香校园建设方案
2014/05/02 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL