2013-10-15 1 views
0

Я искал и увидел, что большинство людей с этой проблемой передают вызов функции, а не имя функции, то есть: setInterval (myFunc(), 100) вместо setInterval (myFunc, 100)JS setInterval() запускается только один раз при анимационной непрозрачности

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

функция runSubMenu1(), как представляется, работать только один раз, независимо от того, включают ли я КРП (i.style.opacity == 1) статья или не

Не знаете, куда идти отсюда? совет?

<script type="text/javascript"> 

var run; 
var runOpt; 

function openSubMenu1(item) { 
    runOpt=item; 
    run = setInterval(runSubMenu1,100); 

} 

function runSubMenu1() { 
    var i=document.getElementById('menu-1-'+runOpt); 

    if(i.style.opacity==1){clearInterval(run);} 
    else{i.style.opacity+=.1;} 


} 


</script> 

EDIT: внесены изменения, упомянутых jfriend00 и непрозрачность имеет значение 0 набора в оригинальной CSS отправленной со страницей, после 1 итерации непрозрачность, кажется, 0,1

+0

Одна ошибка заключается в том, что 'clearInterval (runSubMenu1)' должно быть 'clearInterval (run)'. Кроме того, вы действительно должны добавить 'var i' в' runSubMenu1'. Кроме того, «i.style.opacity» может не иметь значения первоначально, если вы явно не установили его на объекте DOM, так как «i.style» не возвращает значения по умолчанию или значения таблиц стилей - только значения, явно установленные на объекте DOM. – jfriend00

ответ

0

Вы должны разбором значение, так как это строка, в противном случае += .1 не удается:

else { i.style.opacity = parseFloat(i.style.opacity) + .1; } 

Вы добавляете .1 к ".1", что приводит к: ".1.1". Присвоение этого значения непрозрачности вызывает парсер чисел, потому что это числовое значение, но это не удается, поскольку оно не является допустимым числом, поэтому оно возвращается к .1. Интервал цикла бесконечно, но поскольку он перемещается только от 0 до .1, похоже, что он только один раз выполнялся.

Это jsFiddle, чтобы показать результат.

+0

Я раньше пробовал parseFloat(), но не задал непрозрачность в JS .. После того, как я редактировал свой вопрос на основе комментария jfriend00, я перечитывал, что он написал, и понял, что он подразумевал, что непрозрачность 0 в CSS была недостаточной. –

+0

так что теперь, с установкой начальной непрозрачности в JS И с использованием parseFloat() Я получаю правильный результат, спасибо, ребята. –

Смежные вопросы