JavaScript编程模拟时钟时的问题



我试图制作一个简单的模拟时钟,当我试图对时钟的指针进行编程时,它们不移动。我只标记了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);
}

我注意到你的小提琴:

  1. "d"是什么?需要更改为'date'
  2. "s"是什么?需要更改为整数
  3. 将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/

最新更新