svg 学习心得二 时钟的画法

一。设计思路

1.首先画一个时钟的底盘

  • 显示最外层的圆
  • 然后是内层的圆环
  • 再是分钟刻度的点 这个点的实现是通过svg的stroke-dasharray属性实现的

2.接下来是时针,分针,秒针

1.这时候你可以用直线,也可以用折线,他们都需要一个起点,一个终点,你可以把整个圆的圆心作为这些针的起点或终点,不过最好要统一。在这里我将圆心作为了终点

2.时针点的计算

时针上的起点,其实也是一个内层圆上的点,这样说的话可能就比较好理解了

时针起始位置的计算

在这里我是从浏览器当前时间开始的,通过当前时间计算你现在的小时,以及在整个圆盘360 度中所占的角度

注意 svg 中的圆的起点是从 右侧中间部分开始的

如下:

var myDate = new Date();

var hours = myDate.getHours();

//获取初始角度

hours = hours > 12 ? hours - 12 : hours;

_init_prickerAngle_hours = hours * 30 + ((minutes / 60) * 30) - 90;

再由此计算他在这个内层圆上的坐标及时针的起始坐标

x1 = orgin.x + r * Math.cos(angle * Math.PI / 180);

y1 = orgin.y + r * Math.sin(angle * Math.PI / 180);

其中r 是内层圆的半径

分针与秒针的实现与此原理相同

3.然后是 3 条线交汇处的圆环及秒针上的圆环

交汇处的圆环与秒针上的一致

是用3个圆环交叠而成

用时重新设置圆点坐标即可

<g class="a2">

<circle r="6" stroke="none" stroke-width="1" fill="#ab434c"/>

<circle r="4" stroke="none" stroke-width="1" fill="#cc6474"/>

<circle r="2" stroke="none" stroke-width="1" fill="#5d857a"/>

</g>

二。用到的知识

strokedasharray属性用于创建虚线:

如:

stroke-dasharray="5,5"

stroke-dasharray="10,10"

stroke-dasharray="20,10,5,5,5,10"

上边三条线的实现

效果图:

时间: 2024-10-21 09:42:51

svg 学习心得二 时钟的画法的相关文章

svg学习心得一

之前一直看别人写的各种svg动画,画的svg图画,感觉好炫酷,也感觉好难,总有一种无法入手的感觉.但最近由于工作需要,要做一些小动画,要模仿app的原生的,就做了一些尝试及学习.下面是我的一些学习心得: 要做svg动画,就要首先了解一下svg动画的过程 以圆形缓冲加载动画为例: 首先要确定画布的位置: 画一个底边圆 画一个加载的圆 <svg xmlns="" version="1.1" id="my_appointment" width=&

SVG学习心得

在前端开发的过程中,为了界面的美观,会用到很多好看但无法纯利用HTML和CSS实现的图形(对于大佬们这就不算事了,但对于我这个刚入行的后生就难了),如下面的几个图形,如果不用美工妹妹的PS图片,我个人觉得是比较难实现的: 以上的图形利用纯HTML和CSS是比较难实现的,幸好前段时间刚好看到有篇关于SVG的实例讲解,学习了一下SVG,下面是我的学习心得(这是我第一次写博客,写的不好多多见谅) 1.什么是SVG?(这里引用w3school的定义) SVG 指可伸缩矢量图形 (Scalable Vec

SVG 学习(二)--- 创建组合交互式应用

接着上一节的内容,本次学习主要介绍SVG组合式应用以及js交互式应用! 1.组合式应用 绘制两棵带有投影效果的树! <svg width="400" height="600"> <defs> <pattern id="grap" patternUnits="userSpaceOnUse" x="0" y="0" width="100" h

《UNIX环境高级编程》学习心得 二

窝萌来看我们看到这本书里的第一个程序 1 #include "apue.h" 2 #include <dirent.h> 3 4 int 5 main(int argc, char *argv[]) 6 { 7 DIR *dp; 8 struct dirent *dirp; 9 10 if (argc != 2) 11 err_quit("usage: ls directory_name"); 12 13 if ((dp = opendir(argv[1

Python学习心得(二) 字典Dictionary

前言 . 在Python中字典就是一系列的键值对,一种可变容器,可以存储任意对象,也被称作关联数组或哈希表. 1.基本语法   用一对花括号{}中的一系列键值对表示,键与值之间用冒号分隔,键值对之间用逗号分隔,例如: blogger = {'name': 'binguo','age': 27} 2.访问字典中的值 print 'name:'+ blogger['name'] +' age:' +str(blogger['age']) 3.添加键值对 blogger['gender'] = 'ma

软件工程学习心得二

5.2用例规约 用例编号:007 用例名:信息查询 用例描述:该功能可以让用户查询自己的相关信息,包括帐号.密码.姓名及邮箱等 参与者:购书用户 前置条件:电子商城正常运行,用户登录系统进入自己的页面 后置条件:用户提交请求后系统从数据库中调用与该用户有关的所有信息 基本路径: 1.用户执行登录帐号进入自己的页面 2.用户提交信息查询申请 3.系统调用数据库中与该用户有关的信息 4.系统把数据返回给用户 扩展点:无 变异点:无 用例编号:008 用例名:修改信息 用例描述:该功能是信息查询的拓展

我的MYSQL学习心得(十二)

原文:我的MYSQL学习心得(十二) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 我的MYSQL学习心得(九) 我的MYSQL学习心得(十) 我的MYSQL学习心得(十一) 这一篇<我的MYSQL学习心得(二)>将会讲解MYSQL的触发器 触发器是一个特殊的存储过程,不

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

我的MYSQL学习心得(二)

原文:我的MYSQL学习心得(二) 我的MYSQL学习心得(二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 显示宽度 MYSQL中的整数型数据类型都可以指定显示宽度,而SQLSERVER不行 创建一个表 CREATE TABLE tb_emp( id BIGINT(1)) id字段的数据类型为BIGINT(1),注意到后面的数字1,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数