最丑的时钟效果!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 相关文章推荐
javascript数字数组去重复项的实现代码
Dec 30 Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
JavaScript学习心得之概述
Jan 20 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
javascript实现base64 md5 sha1 密码加密
Sep 09 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
js编写贪吃蛇的小游戏
Aug 24 Javascript
getElementById().innerHTML与getElementById().value的区别
Oct 27 Javascript
AngularJS表单基本操作
Jan 09 Javascript
vue之浏览器存储方法封装实例
Mar 15 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 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
wxpython 学习笔记 第一天
2009/02/09 Python
Python中文字符串截取问题
2015/06/15 Python
Python Celery多队列配置代码实例
2019/11/22 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
python支持多继承吗
2020/06/19 Python
详解Python中import机制
2020/09/11 Python
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
食品安全检查制度
2014/02/03 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
检举信的格式及范文
2014/04/04 职场文书
实习生岗位职责
2014/04/12 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
小学生成绩单评语
2014/12/31 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
python超详细实现完整学生成绩管理系统
2022/03/17 Python
Golang 遍历二叉树
2022/04/19 Golang