canvas之特丑时钟
感觉是不是特想送钟,老是编写些时钟的效果,今日就发个丑丑的时钟,老实说
有没有什么调试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的学习就是坐标的不断确认的,然后连成线
最后画成图,这与数学里的点到线,线到面一样的道理。
上面的代码不难都是使用线条画的,就是重复的使用画线函数和填充颜色。噢~还有外加了一个声频标签使用,达到时钟的声音 滴答滴答滴答~
canvas之特丑时钟的更多相关文章
- 基于canvas的原生JS时钟效果
概述 运用html5新增画布canvas技术,绘制时钟效果,无需引用任何插件,纯js. 详细 代码下载:http://www.demodashi.com/demo/11935.html 给大家介绍一个 ...
- 通过Canvas + JS 实现简易时钟实战
最近通过各种渠道学习了下html5中的canvas元素,为了练练手就随手写了一个简易的时钟.时钟本身不复杂,没有使用图片进行美化,下面就与大家分享一下具体的代码: 这是最终实现的效果: 部分的启发点来 ...
- 用canvas的arc绘制时钟
在页面上加入canvas标签: <body> <canvas id="c1" width="600px" height="600px ...
- Canvas画布实现自定义时钟效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- canvas的认识,时钟的设置
canvas的三要素:ID标识,width宽度,height高度,他是行元素 IE9才支持canvas,canvas是一个透明的画板,要用js去画 绘制一个圆 线性渐变颜色 径向渐变 图片的绘制: 视 ...
- 公告栏添加时钟——利用canvas画出一个时钟
前言 最近在学习HTML5标签,学到Canvas,觉得很有趣.便在慕课网找了个demo练手.就是Canvas时钟. 对于canvas,w3shcool上是这么描述的: HTML5 <canvas ...
- 用canvas绘制一个简易时钟
在见识了html5中canvas的强大,笔者准备制作一个简易时钟. 下面就是成果啦,制作之前我们先分析一下,绘制一个时钟需要做哪些准备. 一 . 1.首先这个时钟分为表盘,指针(时针,分针,秒针)和数 ...
- 利用canvas画一个实时时钟
先放一张效果图: 下面是源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- canvas基础绘制-绚丽时钟
效果图: 与canvas基础绘制-绚丽倒计时的代码差异: // var endTime = new Date();//const声明变量,不可修改,必须声明时赋值: // endTime.setTim ...
随机推荐
- 树形菜单的json字符串的拼接
最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用js来遍历组成这个json字符串, 很好! 但是没看懂... var data = [ {&qu ...
- android中如何发送及接收数据(两种方法)?
1.如在MainActivity.java中的按钮点击时设置: //发送数据方法1--简单型 i.putExtra("txt", "没错,我就是刚传来的信息!" ...
- Practice:输入年月日,判断该时间为一年的第几天
#-*- coding:utf- -*- ''' Created on -- # 输入年月日,判断为一年的第几天 @author: AdministrInputator ''' def leapYea ...
- Android中的5种数据存储方式
本文转自 http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.htmlAndroid数据存储Android提供了5种方式存 ...
- NSDate--日期格式
日期格式: 年: y 将年份 (0-9) 显示为不带前导零的数字 yy 以带前导零的两位数字格式显示年份 yyy 以四位数字格式显示年份 yyyy 以四位数字格式显示年份 月: M 将月份显示为不带前 ...
- Unity5 如何做资源管理和增量更新
工具 Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle. Unity自动打包资源是指在Unity场景中直接使用到的资源会随着场景 ...
- OkHttp使用进阶 译自OkHttp Github官方教程
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/3997368.html 没有使用过OkHttp的,可以先看Ok ...
- Yaf零基础学习总结1-Yaf框架简介
从今天开始,给大家讲解下yaf框架,讲解之前肯定要了解下yaf是个什么东西,当然,从标题我们已经知道yaf是个PHP框架了,也许大家对于PHP框架并不陌生,一般PHP程序员用过的框架至少有一两个吧,国 ...
- (原创)defparam的应用(Verilog,CPLD/FPGA)
1.Abstract 在同一个模块被多次例化的时候,改变参数构建不同的硬件实体是一个很好的选择.特别是今天帮一个朋友调试一个比较复杂的逻辑,深有体会.这个也是一个小技巧,回来也查了许多资料,强 ...
- eclipse部署上Tomcat后的clean和publish功能
publish:是将你的web程序发布到tomcat服务器上,这样通过浏览器就可以访问你的程序.clean:是指原先编译到tomcat服务器上的程序,先清除掉,然后再重新编译. publish的作用就 ...