setInterval() for an analogue clock

2019-08-05 09:30发布

I'm quite new to JavaScript and I have trouble working with etInterval().

I'm creating an analogue clock as an exercise. I have a function setTime() that gets and displays the time by rotating the arrows accordingly.

I want to execute this function again and again.

Here is my code :

    $(document).ready(function(){

        function setTime(){
            var d = new Date();
            var hour = d.getHours();
            var minute = d.getMinutes();
            var hourRotation = hour * 30 + (minute / 2);
            var minuteRotation = minute * 6;
            $("#small").css({
                "-webkit-transform": "rotate(" + hourRotation + "deg)",
                "-moz-transform": "rotate(" + hourRotation + "deg)",
                "-o-transform": "rotate(" + hourRotation + "deg)"
            });
            $("#big").css({
                "-webkit-transform": "rotate(" + minuteRotation + "deg)",
                "-moz-transform": "rotate(" + minuteRotation + "deg)",
                "-o-transform": "rotate(" + minuteRotation + "deg)"
            });
        };
        function clockStart(){
            setInterval(setTime(),1000);
            setTime();
        }
        clockStart();
    });

I'd like to understand this method and how to use it. The examples I could find looked so obvious, but still I can't make it work.

3条回答
走好不送
2楼-- · 2019-08-05 10:02

when you call you setInterval function, you don't pass the function reference as a parameter, but it's return value.
So you should use:

setInterval(setTime,1000);

or

setInterval(function(){setTime()},1000);
查看更多
狗以群分
3楼-- · 2019-08-05 10:05

You are making a function call in setInterval().

What you want to do is :

setInterval(setTime,1000);
查看更多
迷人小祖宗
4楼-- · 2019-08-05 10:13

The function setTime() in the line setInterval(setTime(),1000); is getting evaluated before the setInterval() function is called, and the results of the evaluation of setTime() are passed to the setInterval() function as an argument, rather than the function istelf being passed as an argument.

What you need to do is replace the function call ("setTime()") with this name of the function ("setTime") like this: setInterval(setTime, 1000);

查看更多
登录 后发表回答