JavaScript+svg绘制的一个动态时钟
结果图:

代码如下:
<!DOCTYPE html>
<html>
<head>
<title>动态时钟</title>
</head>
<body onload="updateTime();">
<script type="text/javascript">
function updateTime(){ //更新svg时钟来显示当前时间
var now =new Date(); //当前时间
var min = now.getMinutes(); //分钟
var hour = (now.getHours()%12)+min/60;//装换成可以在时钟上表示的时间
var minangle = min*6; //每6度表示一分钟
var hourangle = hour*30; //每30度表示一个小时 //获取表示时钟时针和分针的svg元素
var minhand = document.getElementById('minutehand');
var hourhand = document.getElementById('hourhand'); //设置这些元素的svg属性,将他们移动到中面上
minhand.setAttribute("transform","rotate("+minangle+",50,50)");
hourhand.setAttribute("transform","rotate("+hourangle+",50,50)"); //每一分钟更新下时钟显示时间
setTimeout(updateTime,60000);
}
</script>
<style type="text/css">
#clock{ /*用于时钟的全局样式*/
stroke:black; /*黑线*/
stroke-linecap: round; /*圆角*/
fill:#eef; /*以浅蓝灰色为背景*/
}
#face {stroke-width:3px;} /*时钟的外边框*/
#ticks{stroke-width:2;} /*标记每个小时的线段*/
#hourhand {stroke-width:5px;} /*相对较粗的时针*/
#minutehand{stroke-width:3px;} /*相对较细的分针*/
#numbers{
font-family: sans-serif;
font-size: 7pt;
font-weight: bold;
text-anchor: middle;
stroke:none;
fill:black;
}
</style>
<!-- viewBox是坐标系,width和height是指屏幕大小 -->
<svg id="clock" viewBox="0 0 100 100" width="500" height="500">
<defs> <!-- 定义下拉阴影的滤镜 -->
<filter id="shadow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur in="SourceAlpha" stdDeviation="1" result="blur"/>
<feOffset in="blur" dx="1" dy="1" result="shadow"/>
<feMerge>
<feMergeNode in="SourceGrahic"/>
<feMergeNode in="shadow"/>
</feMerge>
</filter>
</defs>
<circle id="face" cx="50" cy="50" r="45"/> <!-- 钟面 -->
<g id="ticks">
<line x1='50' y1="5.000" x2="50.00" y2="10.00" />
<line x1='72.50' y1="11.03" x2="70.00" y2="15.36" />
<line x1='88.97' y1="27.50" x2="84.64" y2="30.00" />
<line x1='95.00' y1="50.00" x2="90.00" y2="50.00" />
<line x1='88.97' y1="72.50" x2="84.64" y2="70.00" />
<line x1='72.50' y1="88.970" x2="70.00" y2="84.64" />
<line x1='50.00' y1="95.00" x2="50.00" y2="90.00" />
<line x1='27.50' y1="88.97" x2="30.00" y2="84.64" />
<line x1='11.03' y1="72.50" x2="15.36" y2="70.00" />
<line x1='5.000' y1="50.00" x2="10.00" y2="50.00" />
<line x1='11.03' y1="27.50" x2="15.36" y2="30.00" />
<line x1='27.50' y1="11.03" x2="30.00" y2="15.36" />
</g>
<g id="numbers"> <!-- 标记重要的几个刻度 -->
<text x="50" y="18">12</text>
<text x="85" y="53">3</text>
<text x="50" y="88">6</text>
<text x="15" y="53">9</text>
</g>
<!-- 初始绘制成竖直的指针,之后通过JavaScript代码来做旋转 -->
<g id="hands" filter="url(#shadow)"> <!-- 给指针添加阴影 -->
<line id="hourhand" x1="50" y1="50" x2="50" y2="24"/>
<line id="minutehand" x1="50" y1="50" x2="50" y2="20"/>
</g>
</svg>
</body>
</html>
JavaScript+svg绘制的一个动态时钟的更多相关文章
- JavaScript+svg绘制的一个饼状图
结果: svg参考:https://www.w3.org/TR/SVG/<body onload='document.body.appendChild( pieChart([12,23,34,4 ...
- 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)
缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...
- canvas :原生javascript编写动态时钟
canvas :原生javascript编写动态时钟 此时针是以画布的中心为圆心: g.translate(width/2,width/2); 此函数是将画布的原点移到(width/2,wid ...
- 【应用】SVG动态 时钟
没有做秒针,只做了分针和时针,5分钟以后来看应该可以看到效果╮(╯-╰)╭ <!DOCTYPE html> <html> <head> <title>& ...
- svg绘制一个简单地饼图
一个简单地svg绘制饼图的demo,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- iOS 绘制一个表盘时钟,秒针效果可以“扫秒/游走”
最近自己 也尝试写了一个表盘时钟,初衷源于等车时候一个老奶奶问时间,我打开手机,时间数字对我来说相对敏感,但是老奶奶是看不清的,我想识别 还是看表盘 老远 看时针分针角度就可以识别当前时间. 于是我想 ...
- 用canvas绘制一个简易时钟
在见识了html5中canvas的强大,笔者准备制作一个简易时钟. 下面就是成果啦,制作之前我们先分析一下,绘制一个时钟需要做哪些准备. 一 . 1.首先这个时钟分为表盘,指针(时针,分针,秒针)和数 ...
- python+pygame制作一个可自定义的动态时钟和详解
1.效果图 2.完整代码 #第1步:导出模块 import sys, random, math, pygame from pygame.locals import * from datetime im ...
- 18个超有趣的SVG绘制动画赏析
SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了18个非 ...
随机推荐
- Fisher Vector Encoding and Gaussian Mixture Model
一.背景知识 1. Discriminant Learning Algorithms(判别式方法) and Generative Learning Algorithms(生成式方法) 现在常见的模式 ...
- Spring自动化装配bean
1. 场景 用CD(Compact disc)和CD播放器(CDPlayer)阐述DI(依赖注入). 如果不将CD插入(注入)到CDPlayer中,那么CDPlayer其实没有太大的用处,所以,可以这 ...
- Eclipse导入项目常见问题----facet版本问题04
问题如下: 解决办法 右击项目,找到最下面的properties,在搜索facet jdk版本问题(有个红色感叹号)01:http://blog.csdn.net/baidu_37107022/art ...
- Hybrid App开发之JavaScript基础
前言: 前面学习了html和css的基本使用,今天开始学习JavaScript的使用. 什么是JavaScript JavaScript是一种基于对象(Object)和事件驱动(Event Drive ...
- 克隆 CentOS 后系统启动问题解析
问题背景: 虚拟机:VMware Workstation. 操作系统:CentOS,是Linux发行版之一. 问题: 原因:虚拟机的服务没有开启(虚拟机开启一般比较占内存,所有多数人都设置成手动开启) ...
- Javascript及Jquery获取元素节点以及添加和删除操作
用了javascript和jquery很久,把所有元素节点的操作总结了下,放在博客上作为记录. Javascript获取元素的主要方式有三种 1.document.getElementById('ma ...
- iOS,Android,Jave后台AES加密解密
AES256 在iOS和Android上的相关代码: http://www.tuicool.com/articles/RVFbmmU 里面可以下载相关的代码. 我们遇到的问题是: 把Android的代 ...
- redis学习(1)--- NoSQL介绍
一.NoSQL介绍 1.什么是NoSQL NoSQL = Not Only SQL 非关系型数据库 2.为什么用NoSQL High performance - 高并发读写 Huge Storage ...
- springMVC 配置和使用
springMVC相对于Struts2学习难度较为简单,并且更加灵活轻便. 第一步:导入jar包 spring.jar.spring-webmvc.jar.commons-logging.jar.sp ...
- 流畅的python学习笔记:第三章
字典的变种: OrderedDict 首先来看下面的代码,在一个字典中,有name,age,city,在遍历这个字典的时候.顺序却是随机的,不是按照我们添加的顺序也就是name->age-> ...