2013-04-24 3 views
0

Я пишу код для веб-сайта, и я хочу создать линию 165px x 2px, которая появляется, а затем исчезает и продолжает делать это до бесконечности. Я написал этот код в JavaScript:JavaScript setTimeout setInterval

function sivapokretna() { 
     document.getElementById("pokretnasiva").style.width= "165px"; 
     setTimeout("document.getElementById('pokretnasiva').style.width= '0px';", 4000); 
} 

function sivo() { 
    setInterval(sivapokretna(), 8000); 
} 

Как вы можете видеть, в первой функции изменить размер элемента сНа от 0 до 165, а затем после задержки я включаю его обратно в 0. По какой-то причине , это делается только один раз, хотя я использовал setInterval во второй функции. Чтобы не путать меня, я изменился с 3-секундным переходом CSS3. Вот часть CSS кода изменяющегося элемента.

#pokretnasiva { 
    width: 0px; 
    height: 2px; 
    background: #ff0000; 
    transition: width 3s; 
} 

ответ

1

Вы должны передать ссылку на эту функцию в setInterval. Вы вызываете функцию, так что вы фактически передаете ее возвращаемое значение (это undefined, так как нет явного заявления return).

Вы должны удалить вызывающие скобки:

setInterval(sivapokretna, 8000); 
//      ^--- No invoking parentheses here! 
+0

Спасибо, все сработало! Но теперь в начале есть 8-секундная задержка ... Как я могу заставить его сразу же сменить? – user1687538

+1

@ user1687538 - Просто позвоните 'sivapokretna' перед вызовом' setInterval'. Например: 'sivapokretna(); setInterval (sivapokretna, 8000); ' –

+0

Спасибо! Глупо мне ... – user1687538

1

Вы вызов функцию, сразу бежать, а затем говорить setInterval запустить undefined (возвращаемое значение функции) снова и снова.

Вы должны передать функции, не вызов функции и передать его возвращаемое значение.

Снимите ().

setInterval(sivapokretna, 8000)