基于JS和JQuery实现的两种时钟效果(3)

在上一篇博文中实现了秒针的转动,接下来需要进行实现分针的布局和旋转角度计算和时针的布局和旋转角度计算

时钟案例-分针的布局和旋转角度计算

实现的效果图:

实现该效果的css代码与HTML代码:

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="UTF-8">
  5         <title></title>
  6         <style>
  7             *{
  8
  9                 padding: 0px;
 10                 margin: 0px;
 11             }
 12             #clock{
 13                 width: 800px;
 14                 height: 800px;
 15                 border: 1px solid red;
 16                 margin: auto;
 17                 background: url(img/timg.png) 0px 0px no-repeat;
 18                 background-size: 100% 100%;
 19                 position: relative;
 20             }
 21             .second{
 22
 23                 width: 22px;
 24                height: 373px;
 25                /*border: 1px solid red;*/
 26                background: url(img/pointer.png) -9px 0px no-repeat;
 27                background-size: 606% 100%;
 28                position: absolute;
 29                left: 393px;
 30               top: 135px;
 31               opacity: 0.5;
 32               transform: rotate(46deg);
 33               transform-origin: 11px 273px;
 34
 35             }
 36             .secHead{
 37
 38                 width: 40px;
 39                 height: 40px;
 40                 background: url(img/one.jpg) 0px 0px no-repeat;
 41                 background-size: 100% 100%;
 42                 position: absolute;
 43                 left: -10px;
 44                 top: 64px;
 45                 border-radius: 50%;
 46
 47             }
 48
 49             .minute{
 50
 51                 width: 22px;
 52                height: 373px;
 53                /*border: 1px solid red;*/
 54                background:  url(img/pointer.png) -53px 0px no-repeat;
 55                background-size: 606% 100%;
 56                position: absolute;
 57                left: 393px;
 58               top: 135px;
 59               opacity: 0.5;
 60               transform: rotate(100deg);
 61               transform-origin: 11px 273px;
 62
 63             }
 64         </style>
 65         <script>
 66             var secDegree=0;
 67             var minDegree=0;
 68
 69             function bodyload(){
 70                 var now=new Date();
 71                 var sec=now.getSeconds();
 72                 secDegree=sec*6;//当前的秒数乘以6
 73
 74
 75                 //当前的分钟*(每秒钟旋转的度数*每分钟的秒数)
 76                 //计算当前分针旋转的角度
 77                 var min=now.getMinutes();
 78                   minDegree=min*(0.1*60);
 79
 80
 81
 82
 83
 84             }
 85             //每秒钟调用一次
 86             function clockRotate(){
 87                 //秒针的旋转
 88                 secDegree+=6;
 89                 var divSecond=document.getElementsByClassName("second");//getElementsByClassName带s因此需要返回一个数组
 90                 divSecond[0].style.transform="rotate("+secDegree+"deg)";
 91
 92
 93                 //分针的旋转
 94                 minDegree+=0.1;//(360/3600)
 95                 var divMinute=document.getElementsByClassName("minute");//getElementsByClassName带s因此需要返回一个数组
 96                 divMinute[0].style.transform="rotate("+minDegree+"deg)";
 97             }
 98             //启动定时器,定时调用旋转函数
 99             setInterval("clockRotate()",1000);
100         </script>
101     </head>
102     <body onload="bodyload()">
103         <div id="clock">
104             <div class="second">
105                 <div class="secHead">
106
107
108                 </div>
109
110
111             </div>
112             <div class="minute">
113
114
115             </div>
116
117
118         </div>
119     </body>
120 </html>

Clock.html

实现的js代码:

 1 <script>
 2             var secDegree=0;
 3             var minDegree=0;
 4
 5             function bodyload(){
 6                 var now=new Date();
 7                 var sec=now.getSeconds();
 8                 secDegree=sec*6;//当前的秒数乘以6
 9
10
11                 //当前的分钟*(每秒钟旋转的度数*每分钟的秒数)
12                 //计算当前分针旋转的角度
13                 var min=now.getMinutes();
14                   minDegree=min*(0.1*60);
15
16
17
18
19
20             }
21             //每秒钟调用一次
22             function clockRotate(){
23                 //秒针的旋转
24                 secDegree+=6;
25                 var divSecond=document.getElementsByClassName("second");//getElementsByClassName带s因此需要返回一个数组
26                 divSecond[0].style.transform="rotate("+secDegree+"deg)";
27
28
29                 //分针的旋转
30                 minDegree+=0.1;//(360/3600)
31                 var divMinute=document.getElementsByClassName("minute");//getElementsByClassName带s因此需要返回一个数组
32                 divMinute[0].style.transform="rotate("+minDegree+"deg)";
33             }
34             //启动定时器,定时调用旋转函数
35             setInterval("clockRotate()",1000);
36         </script>

其中:分针的旋转角度360/3600=0.1

 minDegree+=0.1;
计算当前分针旋转的角度:
当前的分钟*(每秒钟旋转的度数*每分钟的秒数)
var min=now.getMinutes();
                  minDegree=min*(0.1*60);

时钟案例-时针的布局和旋转角度计算

时针一秒钟旋转的角度

360度*(12小时*3600秒)

//时针的旋转
                houDegree+=0.008333;//360/(12*3600)=0.008333//时针一秒钟旋转的角度
                var divHour=document.getElementsByClassName("hour");//getElementsByClassName带s因此需要返回一个数组
                divHour[0].style.transform="rotate("+houDegree+"deg)";

计算当前时针旋转的角度:

 //计算当前时针旋转的角度
                var hou=now.getHours();
                 // houDegree=hou*(360/12);
                  houDegree=(hou+min/60)*30;
                

去掉透明度与调整初始旋转的角度的效果:

实现最终该效果的总代码:

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="UTF-8">
  5         <title></title>
  6         <style>
  7             *{
  8
  9                 padding: 0px;
 10                 margin: 0px;
 11             }
 12             #clock{
 13                 width: 800px;
 14                 height: 800px;
 15                 border: 1px solid red;
 16                 margin: auto;
 17                 background: url(img/timg.png) 0px 0px no-repeat;
 18                 background-size: 100% 100%;
 19                 position: relative;
 20             }
 21             .second{
 22
 23                 width: 22px;
 24                height: 373px;
 25                /*border: 1px solid red;*/
 26                background: url(img/pointer.png) -9px 0px no-repeat;
 27                background-size: 606% 100%;
 28                position: absolute;
 29                left: 393px;
 30               top: 135px;
 31
 32              /* opacity: 0.5;*/
 33               transform: rotate(0deg);
 34               transform-origin: 11px 273px;
 35
 36             }
 37             .secHead{
 38
 39                 width: 40px;
 40                 height: 40px;
 41                 background: url(img/one.jpg) 0px 0px no-repeat;
 42                 background-size: 100% 100%;
 43                 position: absolute;
 44                 left: -10px;
 45                 top: 64px;
 46                 border-radius: 50%;
 47
 48             }
 49
 50             .minute{
 51
 52                 width: 22px;
 53                height: 373px;
 54                /*border: 1px solid red;*/
 55                background:  url(img/pointer.png) -53px 0px no-repeat;
 56                background-size: 606% 100%;
 57                position: absolute;
 58                left: 393px;
 59               top: 135px;
 60               /*opacity: 0.5;*/
 61               transform: rotate(0deg);
 62               transform-origin: 11px 273px;
 63
 64             }
 65
 66             .hour{
 67
 68                 width: 31px;
 69                height: 373px;
 70                /*border: 1px solid red;*/
 71                background:  url(img/pointer.png) -101px 0px no-repeat;
 72                background-size: 468% 100%;/*背景图片的缩放*/
 73                position: absolute;
 74                left: 389px;
 75               top: 135px;
 76              /* opacity: 0.5;*/
 77               transform: rotate(0deg);
 78               transform-origin: 16px 273px;
 79
 80             }
 81         </style>
 82         <script>
 83             var secDegree=0;
 84             var minDegree=0;
 85             var  houDegree=0;
 86
 87             function bodyload(){
 88                 var now=new Date();
 89                 var sec=now.getSeconds();
 90                 secDegree=sec*6;//当前的秒数乘以6
 91
 92
 93                 //当前的分钟*(每秒钟旋转的度数*每分钟的秒数)
 94                 //计算当前分针旋转的角度
 95                 var min=now.getMinutes();
 96                  // minDegree=min*(0.1*60);
 97                   minDegree=min*6;
 98
 99
100                   //计算当前时针旋转的角度
101                 var hou=now.getHours();
102                  // houDegree=hou*(360/12);
103                   houDegree=(hou+min/60)*30;
104
105
106
107
108
109             }
110             //每秒钟调用一次
111             function clockRotate(){
112                 //秒针的旋转
113                 secDegree+=6;
114                 var divSecond=document.getElementsByClassName("second");//getElementsByClassName带s因此需要返回一个数组
115                 divSecond[0].style.transform="rotate("+secDegree+"deg)";
116
117
118                 //分针的旋转
119                 minDegree+=0.1;//
120                 var divMinute=document.getElementsByClassName("minute");//getElementsByClassName带s因此需要返回一个数组
121                 divMinute[0].style.transform="rotate("+minDegree+"deg)";
122
123                 //时针的旋转
124                 houDegree+=0.008333;//360/(12*3600)=0.008333//时针一秒钟旋转的角度
125                 var divHour=document.getElementsByClassName("hour");//getElementsByClassName带s因此需要返回一个数组
126                 divHour[0].style.transform="rotate("+houDegree+"deg)";
127             }
128             //启动定时器,定时调用旋转函数
129             setInterval("clockRotate()",1000);
130         </script>
131     </head>
132     <body onload="bodyload()">
133         <div id="clock">
134             <div class="hour">
135
136
137             </div>
138             <div class="minute">
139
140
141             </div>
142
143             <div class="second">
144                 <div class="secHead">
145
146
147                 </div>
148
149
150             </div>
151
152
153
154
155         </div>
156     </body>
157 </html>

最终效果

原文地址:https://www.cnblogs.com/jiguiyan/p/11437430.html

时间: 2024-10-14 10:50:32

基于JS和JQuery实现的两种时钟效果(3)的相关文章

基于JS和JQuery实现的两种时钟效果(6)

数码管时钟-根据当前时间变化秒钟 在上一篇博文中实现了数码管时钟的布局,接下来我们就让数码管时钟动起来吧!在该篇博文中录的gif图像有点差强人意,望见谅. 项目文件: 实现根据当前时间变化秒钟的效果: 实现该效果的js代码: 1 <script type="text/javascript" src="js/jquery-3.4.1.slim.min.js" ></script> 2 <script type="text/jav

基于JS和JQuery实现的两种时钟效果(4)

在上一篇博文中使用了js实现了时钟的案例,在这篇博文中将介绍使用JqueryRotate插件简化时钟代码以及为时钟进行添加声音 使用JqueryRotate插件简化时钟 插件jqueryrotate优点 它可以实现旋转效果.jqueryrotate 支持所有主流浏览器,甚至包括 IE6,所以在兼容方面可以得到很好的保证.如果你想在低版本的 IE 中实现旋转效果,那么 jqueryrotate 是一个很好的选择. 首先看出现的问题效果: 可以看出时针分针秒针旋转的是图片的正中心 出现该错误的js代

Js类的静态方法与实例方法区分以及jQuery如何拓展两种方法

上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记. 后来从事了前端的工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知,这里还是赘述一番,以免产生歧义)的操作上,严重缺乏整体概念,最近看extetnd中再次提到拓展静态方法与实例方法,故而再次百度,才幡然领悟,其实一直有用,只是不知其专业术语呀,哈哈~ 静态方法,属于类的方法,即类可以直接调用的方法.为类所有实例化对象所共用(但不能用实例对象之间调用),所以静态

js判断复合数据类型的两种方式(typeof不奏效了)

js判断复合数据类型的两种方式(typeof不奏效了) 博客分类: Web前端-JS语言核心 JavaScript 作者:zccst typeof认为所有的复合数据类型都是"object",没法进一步细分,所以还得用其他方法 先上结论: 1,(arr && typeof(arr) === "object" && arr.constructor === Array) 2,Object.prototype.toString.call(ar

基于Apache+Tomcat负载均衡的两种实现方法

Apache+Tomcat实现负载均衡的两种实现方法 如果我们将工作在不同平台的apache能够实现彼此间的高效通信,因此它需要一种底层机制来实现--叫做apr Apr的主要目的就是为了其能够让apache工作在不同的平台上,但在linux上安装apache的时候通常都是默认安装的 [[email protected] ~]#rpm -qi aprName                 :apr                                        Relocation

JS取地址栏参数的两种方法

第一种方法: function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]); return null;} 第二种方法: function getParamValue(

js获取url参数值的两种方式

js获取url参数值的方法有很多,下面也为大家介绍两种,喜欢的朋友可以测试下,希望对大家有所帮助 方法一:正则分析法 代码如下: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if

jQuery中插件开发两种方式

最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验讲讲插件开发.jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQuery看成一个类,那么就相当于给jQuery类本身添加方法.第二种是对象扩展的方式开发插件,即jQuery对象添加方法. 类扩展

基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS

广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索. BFS的思想: 从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1.V2.--Vn,然后依次访问与V1.V2--Vn相邻且未被访问的顶点.如此继续,找到所要找的顶点或者遍历完整个图.我们采用队列来存储访问过的节点. DFS的思想: 深度优先搜索所遵循的策略就是尽可能"深"的在图中进行搜索,对于图中某一个