最丑的时钟效果!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 打造动态渐变按钮 详细图文教程
Apr 25 Javascript
javascript插入样式实现代码
Feb 22 Javascript
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
jquery Validation表单验证使用详解
Sep 12 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
Dec 02 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
jquery实现轮播图效果
Feb 13 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 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
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
js继承实现方法详解
2016/12/16 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
详解python中*号的用法
2019/10/21 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
基层干部十八大感言
2014/01/19 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
优秀教师演讲稿
2014/05/06 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers