在编程模拟时钟时使用JavaScript问题

时间:2015-08-18 22:09:31

标签: javascript html5

我试图制作一个简单的模拟时钟,当我尝试编程钟表时,它们不会移动。 我只用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/

4 个答案:

答案 0 :(得分:1)

它是一个错误的日期

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 :(得分:1)

有一些事情妨碍了这项工作。

首先,您的代码永远不会执行。您已将事件附加到窗口的load事件,但该事件只能附加一个事件。你设置jsFiddle的方式,jsFiddle加载事件处理程序正在破坏(覆盖)它,所以它永远不会被调用。如果您将jsFiddle选项更改为No wrap - in <head>,它将解决该问题。

更好的解决方案仍然是使用安全,可移植的解决方案,如jQuery,它可以处理管理多个页面加载脚本所涉及的复杂性。

一旦处理完毕,您的代码就会出现拼写错误:使用d代替date(一旦代码实际运行,您就会看到控制台)。

修正了jsFiddle:https://jsfiddle.net/kjs7esbs/1/

答案 2 :(得分:0)

我在你的小提琴中注意到的一些事情:

  1. 什么是&#39; d&#39;?需要更改为&#39; date&#39;
  2. 什么是&#39; s?需要更改为整数
  3. 将setTimeout更改为setInterval
  4. 更新的代码:

    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/

答案 3 :(得分:0)

万一你需要,这是模拟时钟的工作版本:

&#13;
&#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);
&#13;
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;
}
&#13;
<div id="clock">
    <div id="hour"></div>
    <div id="min"></div>
    <div id="sec"></div>
</div>
&#13;
&#13;
&#13;

jsFiddle:https://jsfiddle.net/ubm06q32/18/