最丑的时钟效果!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 cookies 设置、读取、删除实例代码
Apr 12 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
open 动态修改img的onclick事件示例代码
Nov 13 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
基于jquery编写分页插件
Mar 07 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
微信小程序 开发经验整理
Feb 15 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
vue-for循环嵌套操作示例
Jan 28 Javascript
javascript History对象原理解析
Feb 17 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文件上传原理与实现方法详解
2019/12/20 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
python控制台显示时钟的示例
2014/02/24 Python
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
python实现SOM算法
2018/02/23 Python
浅谈python之新式类
2018/08/12 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python sep参数使用方法详解
2020/02/12 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
会议邀请函范文
2014/01/09 职场文书
公司面试感谢信
2014/02/01 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
交通事故协议书范本
2014/11/18 职场文书
捐书仪式主持词
2015/07/04 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL