最丑的时钟效果!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 相关文章推荐
IE6 fixed的完美解决方案
Mar 31 Javascript
functional继承模式 摘自javascript:the good parts
Jun 20 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 Javascript
微信小程序实现添加手机联系人功能示例
Nov 30 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
Apr 26 jQuery
浅谈vue父子组件怎么传值
Jul 21 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
Jan 18 Javascript
JavaScript如何优化逻辑判断代码详解
Jun 08 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
apache rewrite_module模块使用教程
2008/01/10 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
Prototype String对象 学习
2009/07/19 Javascript
js 动态文字滚动的例子
2011/01/17 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
js字符串转成JSON
2013/11/07 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
python计算时间差的方法
2015/05/20 Python
用matplotlib画等高线图详解
2017/12/14 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python实现最小二乘法线性拟合
2019/07/19 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
Python数据正态性检验实现过程
2020/04/18 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
计算机学生的自我评价分享
2014/02/18 职场文书
大学生读书笔记大全
2015/07/01 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android