JavaScript实现钟表样式
效果如图所示

代码如下
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #box { width: 225px; height: 225px; margin: 100px auto 0; background: url("img/QQ图片20211120091043.jpg") no-repeat; position: relative; background-position: -33px -8px; /*背景进行水平和垂直移动*/ border-radius: 50%; } #dian { width: 2px; height: 2px; background: green; position: absolute; left: 112px; top: 112px; } #shi { width: 6px; height: 60px; position: absolute; left: 110px; top: 70px; background: #000; transform-origin: 50% 72% /*焦点对焦,把线段固定到一点转动*/ } #fen { width: 4px; height: 80px; position: absolute; left: 111px; top: 50px; background: #000; transform-origin: 50% 79% } #miao { width: 2px; height: 100px; background: red; position: absolute; left: 112px; top: 40px; transform-origin: 50% 73%; /*transform: rotate(90deg)*/ } </style> </head> <body> <div id="box"> <div id="shi"></div> <div id="fen"></div> <div id="miao"></div> <div id="dian"></div> </div> </body> </html> <script> var miao = document.getElementById('miao') var fen = document.getElementById('fen') var shi = document.getElementById('shi') setInterval(function () { var time = new Date(), s = time.getSeconds(), m = time.getMinutes(), h = time.getHours() miao.style.transform = 'rotate(' + s * 6 + 'deg)' fen.style.transform = 'rotate(' + (m + s / 60) * 6 + 'deg)' shi.style.transform ='rotate(' + (h + m/60 +s/3600) * 30 + 'deg)' }, 1000) // console.log(new Date()) // console.log(new Date().getSeconds()) // console.log(new Date().getMinutes()) // console.log(new Date().getHours()) // console.log(new Date().getDate()) // console.log(new Date().getMonth()) // console.log(new Date().getFullYear()) // console.log(new Date().getDay()) </script>
首先我们要实现这个效果,我们先要实现秒针的效果
我们思考
首先定义一个盒子,我们把它叫做miao
思考
秒针转动一格是6°
我们利用动画让他转动6°不就行了
开始实践
html代码如下
<div id="box">
<div id="shi"></div>
<div id="fen"></div>
<div id="miao"></div>
<div id="dian"></div>
</div>
css代码如下
#miao {
width: 2px;
height: 100px;
background: red;
position: absolute;
left: 112px;
top: 40px;
}
js代码如下
var miao = document.getElementById('miao')
var time = new Date(),
s = time.getSeconds(),
miao.style.transform = 'rotate(' + s * 6 + 'deg)'
当我们实现以上的代码时候
我们会发现秒针在页面中是不动的
只有我们将页面不断刷新的时候才能实现秒针转的效果
我们可以加入一个定时器,每隔一段时间获取当前的秒数,然后进行计算后,得出需要旋转的度数,这样我们就可以实现秒针自动旋转了
修改js代码如下
var miao = document.getElementById('miao')
setInterval(function () {
var time = new Date(),
s = time.getSeconds(),
miao.style.transform = 'rotate(' + s * 6 + 'deg)'
}, 1000)
这样我们就实现了秒针的效果
但是我们为了下一步更加便捷,我们在css中加入
transform-origin: 50% 72%
/*焦点对焦,把线段固定到一点转动*/
此行代码的作用是将秒针分针时针都固定到一个点上,观看更加直白
这样我们再考虑分针的效果实现
我们可以思考到
分针的效果也是移动一格,一分钟也是6°
应该和秒针差不多
我们开始实践
html代码如下
<div id="box">
<div id="shi"></div>
<div id="fen"></div>
<div id="miao"></div>
<div id="dian"></div>
</div>
css代码如下
#fen {
width: 4px;
height: 80px;
position: absolute;
left: 111px;
top: 50px;
background: #000;
transform-origin: 50% 79%
}
js代码如下
var fen = document.getElementById('fen')
setInterval(function () {
var time = new Date(),
m = time.getMinutes(),
fen.style.transform = 'rotate(' + m* 6 + 'deg)'
}, 1000)
但这样我们发现这样的话,分针会,直接跳一个格,但是我们实际生活中是,分针缓慢的移动
所以他是跟着相应秒数的变化而进行旋转的
所以我们修改js代码如下
fen.style.transform = 'rotate(' + (m + s / 60) * 6 + 'deg)'
最后我们来实现时针的效果
同上,分针是根据秒数,分钟数的变化来旋转,但是需要注意,一小时的变化是旋转30°
html代码如下
<div id="box">
<div id="shi"></div>
<div id="fen"></div>
<div id="miao"></div>
<div id="dian"></div>
</div>
css代码如下
#shi {
width: 6px;
height: 60px;
position: absolute;
left: 110px;
top: 70px;
background: #000;
transform-origin: 50% 72%
/*焦点对焦,把线段固定到一点转动*/
}
js代码如下
var shi = document.getElementById('shi')
setInterval(function () {
var time = new Date(),
h = time.getHours()
shi.style.transform ='rotate(' + (h + m/60 +s/3600) * 30 + 'deg)'
}, 1000)
这样我们就实现了钟表的效果了
补充
// console.log(new Date().getSeconds())
// console.log(new Date().getMinutes())
// console.log(new Date().getHours())
// console.log(new Date().getDate())
// console.log(new Date().getMonth())
// console.log(new Date().getFullYear())
// console.log(new Date().getDay())
以上的是控制台获取当前的值
效果为

console.log(new Date().getDay())
这是控制台获取当前是星期六
console.log(new Date().getSeconds())
这是控制台获取当前的秒数
console.log(new Date().getMinutes())
这是控制台获取当前的分钟数
console.log(new Date().getHours())
这是控制台获取当前的小时数
console.log(new Date().getDate())
这是控制台获取当前的日期
console.log(new Date().getMonth())
这是控制台获取当前的月份
console.log(new Date().getFullYear())
这是控制台获取当前的年份

浙公网安备 33010602011771号