最丑的时钟效果!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 相关文章推荐
js实现二代身份证号码验证详解
Nov 20 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
Jul 06 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
实现单层json按照key字母顺序排序的示例
Dec 06 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
vue的keep-alive用法技巧
Aug 15 Javascript
vue项目中监听手机物理返回键的实现
Jan 18 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 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
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php封装的验证码类分享
2017/02/26 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
python列表操作使用示例分享
2014/02/21 Python
Python第三方库的安装方法总结
2016/06/06 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
护理不良事件检讨书
2014/02/06 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
广告宣传策划方案
2014/05/21 职场文书
考博导师推荐信范文
2015/03/27 职场文书
中小企业员工手册范本
2015/05/14 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
7个关于Python的经典基础案例
2021/11/07 Python
Python MNIST手写体识别详解与试练
2021/11/07 Python
mysql函数全面总结
2021/11/11 MySQL
PyTorch device与cuda.device用法
2022/04/03 Python
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python