我试图制作一个简单的模拟时钟,当我试图对时钟的指针进行编程时,它们不移动。我只标记了CSS秒针来测试,但它不起作用。
这是代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{
margin:0;
padding:0;
background-color:#E9E9E9;
height:100%;
width:100%;
overflow:hidden;
text-align:center;
position:absolute;
}
#clock {
margin:0 auto;
top:100px;
width:600px;
height:600px;
background-color:white;
box-shadow:0px 0px 10px #A4A4A4;
border-radius:300px;
text-align:center;
}
#sec{
position:relative;
width:300px;
height:10px;
top:300px;
left:300px;
background-color:black;
transform-origin:top left;
}
</style>
</head>
<body>
<div id="clock">
<div id="hour"></div>
<div id="min"></div>
<div id="sec"></div>
</div>
<script>
window.addEventListener('load',(function init(){clock();}));
function clock(){
var d, hour, min, sec;
d = new Date;
hour = d.getHours();
min = d.getMinutes();
sec = d.getSeconds();
setAttr('min',min*6);
setAttr('sec',sec*6);
setInterval(clock, 1000);
}
function setAttr(id,val){
var a = 'rotate(' + val + 'deg)';
document.getElementById(id).style.transform = a;
}
function setAttr(id,val){
var a = 'rotate(' + val + 'deg)';
document.getElementById(id).style.transform = a;
}
</script>
</body>
</html>
如果有人能帮我,我就把小提琴贴出来。https://jsfiddle.net/ubm06q32/ 有一些事情会阻止这个工作。
第一个是你的代码永远不会执行。您将一个事件附加到窗口的load
事件,但是该事件只能附加一个东西。您设置jsFiddle的方式是,jsFiddle加载事件处理程序正在覆盖(覆盖)它,因此它永远不会被调用。如果您将jsFiddle选项更改为No wrap - in <head>
,它将解决这个问题。
一个更好的解决方案仍然是使用一个安全的,可移植的解决方案,如jQuery,它处理涉及管理多个页面加载脚本的复杂性。
一旦处理了这个问题,你的代码中有一个错字:使用d
而不是date
(一旦代码实际运行,你会在控制台上看到)。
修复jsFiddle: https://jsfiddle.net/kjs7esbs/1/
这是一个排版错误,使d到日期
function clock(){
var date, hour, min, sec;
date = new Date;
hour = date.getHours();
min = date.getMinutes();
sec = date.getSeconds();
setAttr('min',min*6);
setAttr('sec',sec*6);
setTimeout(clock, 1000);
}
我注意到你的小提琴:
- "d"是什么?需要更改为'date'
- "s"是什么?需要更改为整数
- 将setTimeout更改为setInterval
更新代码:
function clock(){
var date, hour, min, sec;
date = new Date;
hour = date.getHours();
min = date.getMinutes();
sec = date.getSeconds();
setAttr('min',min*6);
setAttr('sec',sec*6);
setInterval(clock, 1000);
}
更新小提琴:
https://jsfiddle.net/ubm06q32/13/以防万一,这是模拟时钟的工作版本:
var date, hourPos, minPos, secPos;
function clock(){
date = new Date;
secPos = date.getSeconds() * (360 / 60);
minPos = date.getMinutes() * (360 / 60) + secPos / 60;
hourPos = date.getHours() % 12 * (360 / 12) + minPos / 60 + secPos / 3600;
setAttr('hour', hourPos - 90);
setAttr('min', minPos - 90);
setAttr('sec', secPos - 90);
}
function setAttr(id,val){
var a = 'rotate(' + val + 'deg)';
document.getElementById(id).style.transform = a;
}
setInterval(clock, 1000 / 60);
body{
margin:0;
padding:0;
background-color:#E9E9E9;
height:100%;
width:100%;
overflow:hidden;
text-align:center;
position:absolute;
}
#clock {
margin:0 auto;
top:100px;
width:600px;
height:600px;
background-color:white;
box-shadow:0px 0px 10px #A4A4A4;
border-radius:300px;
text-align:center;
}
#sec{
position:relative;
width:250px;
height:3px;
top:300px;
left:300px;
background-color:black;
transform-origin:top left;
}
#hour{
position:relative;
width:150px;
height:3px;
top:300px;
left:300px;
background-color:yellow;
transform-origin:top left;
}
#min{
position:relative;
width:230px;
height:3px;
top:300px;
left:300px;
background-color:blue;
transform-origin:top left;
}
#sec{
position:relative;
width:280px;
height:3px;
top:300px;
left:300px;
background-color:black;
transform-origin:top left;
}
<div id="clock">
<div id="hour"></div>
<div id="min"></div>
<div id="sec"></div>
</div>
jsFiddle: https://jsfiddle.net/ubm06q32/18/