最丑的时钟效果!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操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
超链接的禁用属性Disabled使用示例
Jul 31 Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 Javascript
jQuery根据表单name获取值的方法
May 24 Javascript
Javascript发送AJAX请求实例代码
Aug 21 Javascript
vue组件实现文字居中对齐的方法
Aug 23 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 jQuery
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
vue路由守卫,限制前端页面访问权限的例子
Nov 11 Javascript
js中!和!!的区别与用法
May 09 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
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Smarty模板语法详解
2019/07/20 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
用python实现学生管理系统
2020/07/24 Python
python 如何区分return和yield
2020/09/22 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
个人求职信范文分享
2014/01/06 职场文书
自荐信格式简述
2014/01/25 职场文书
大学活动总结模板
2014/07/10 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
2016年感恩节寄语
2015/12/07 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang