最丑的时钟效果!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 JSON的解析方式
Jul 25 Javascript
JavaScript 更严格的相等 [译]
Sep 20 Javascript
了解了这些才能开始发挥jQuery的威力
Oct 10 Javascript
Json序列化和反序列化方法解析
Dec 19 Javascript
究竟什么是Node.js?Node.js有什么好处?
May 29 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
ng-events类似ionic中Events的angular全局事件
Sep 05 Javascript
js实现自定义滚动条的示例
Oct 27 Javascript
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
深入分析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的FTP学习(二)[转自奥索]
2006/10/09 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php修改数组键名的方法示例
2017/04/15 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
python matplotlib画图实例代码分享
2017/12/27 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Python装饰器语法糖
2019/01/02 Python
详解python中sort排序使用
2019/03/23 Python
学生自我评价范文
2014/02/02 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
导游词欢迎词
2015/02/02 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
Mysql忘记密码解决方法
2022/02/12 MySQL
Nebula Graph解决风控业务实践
2022/03/31 MySQL
python playwright之元素定位示例详解
2022/07/23 Python