2013-05-21 2 views
0

Я очень смущен, как они работают ... тайм-аут не кажется, продолжает работать он вызывает begin_anim один раз, а потом вот это ....Confused с установленным таймаутом

Так я надеюсь кто-то может увидеть, где я пошло не так и объясните, как я это реализую?

Это мой код:

//test data: 
//type = 'up'; 
//div = document.getElementById('theid'); 
//marginL = -400; 

function timeout_begin(type,div,marginL){ 
    setTimeout(begin_anim(type,div,marginL),1000); 
} 

function begin_anim(type,div,marginL){ 
    if(type == 'up'){ 
     if(marginL >= '-200'){ 
       if(marginL > '-200'){ 
        div.style.marginLeft = '-200px'; 
       } 
      return false; 
     } 
    marginL += 2; 
    div.style.marginLeft = marginL+'px'; 


    } 
    return false; 
} 

Надеется, что вы можете помочь!

+0

Как бы вы реализовали «что»? «а потом это» --- это не ошибка. – zerkms

+0

установленный тайм-аут .. потому что он не работает. Я никогда не говорил, что у меня ошибка, нет синтаксической ошибки. – Sir

+0

Что означает «не работает»? – zerkms

ответ

4

Вы ищете setInterval!

Кроме того, это, вероятно, лучше, чтобы передать реальную функцию, и вы можете хранить ссылку на петлю, так что вы можете остановить это работает позже, если вы хотите:

var animationLoop = setInterval(function() { 
     begin_anim(type, div, marginL); 
    }, 1000); 

clearInterval(animationLoop); // This would then stop the loop. 
+0

Но разве это не значит, что он снова вызовет, даже если он еще не закончен? – Sir

+0

@Dave: JS - это однопоточный язык программирования, а вызовы будут поставлены в очередь (это немного сложнее, но в этом случае это все, что вам нужно знать) PS: как это работает: http: // ejohn .org/blog/how-javascript-timers-work/ – zerkms

+0

Так что единственное различие заключается в том, что один из них «ждет», а затем выполняет ... другой «выполняет каждые X ms» – Sir

1

setTimeout предполагается назвать функция только один раз.

, если вы хотите, чтобы вызвать метод повторно использовать setInterval(function(){}, 1000/*duration*/)

0

SetTimeout только ожидается выполнение функции сразу после заданного тайм-аута. См. Документацию здесь: http://www.w3schools.com/jsref/met_win_settimeout.asp

Возможно, вы ищете setInterval (http://www.w3schools.com/jsref/met_win_setinterval.asp), который выполняет код с заданным интервалом до тех пор, пока не вызывается clearInterval.

+0

w3schools - ужасный ресурс. Использовать MDN –

+0

Он описывает поведение программы, описывает все параметры, дает пример и их легко найти (первый результат в Google). Для меня это кажется вполне достаточным, по крайней мере, для этих двух конкретных функций. Но если есть лучший ресурс, который, безусловно, хорошо знать. – Anthony

+0

Во-первых, они называют первый аргумент «кодом». Это потому, что они на самом деле обычно рекомендуют передать ему строку. Затем они упоминают третий аргумент, lang. Я сомневаюсь в чем-либо, но «JavaScript» поддерживается ничем, кроме IE (о котором они не упоминают). Если передана функция (а не строка), аргумент не имеет никакого смысла. В своем примере «setInterval» они также присваивают возвращаемое значение «clearTimeout» обратно идентификатору, но в документации 'clearTimeout' никогда не упоминается, что такое возвращаемое значение. В качестве побочного примечания 'function() {clock()}' вполне можно заменить просто 'clock'. –

1

Во-первых, вы хотите setInterval, не setTimeout

Во-вторых, вы будете проходить ссылку на функцию, а не вызова к функции. Что-то вроде:

function timeout_begin(type,div,marginL) 
{ 
    setTimeout(
    function() { 
     begin_anim(type,div,marginL); 
    }, 
    1000 
); 
} 
Смежные вопросы