setInterval () для аналоговых часов - PullRequest
1 голос
/ 21 июля 2011

Я довольно новичок в JavaScript и у меня проблемы с работой etInterval().

Я создаю аналоговые часы в качестве упражнения. У меня есть функция setTime(), которая получает и отображает время, поворачивая стрелки соответственно.

Я хочу выполнить эту функцию снова и снова.

Вот мой код:

    $(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();
    });

Я бы хотел понять этот метод и как его использовать. Примеры, которые я мог найти, выглядели настолько очевидными, но все же я не могу заставить это работать.

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Вы делаете вызов функции в setInterval().

То, что вы хотите сделать, это:

setInterval(setTime,1000);
2 голосов
/ 21 июля 2011

Функция setTime() в строке setInterval(setTime(),1000); вычисляется до вызова функции setInterval(), а результаты оценки setTime() передаются в функцию setInterval() в качестве аргумента, а нефункция istelf передается в качестве аргумента.

Вам нужно заменить вызов функции ("setTime()") на это имя функции ("setTime") следующим образом: setInterval(setTime, 1000);

2 голосов
/ 21 июля 2011

когда вы вызываете функцию setInterval, вы не передаете ссылку на функцию в качестве параметра, но это возвращаемое значение.
Поэтому вы должны использовать:

setInterval(setTime,1000);

или

setInterval(function(){setTime()},1000);
...