Я изучаю javascript для удовольствия, и у меня есть странная проблема. Я пытаюсь создать свою собственную функцию fade-in. Однако мой код не работает, он просто показывает «content» div в полной непрозрачности.javascript timeout в цикле
Функция setContentOpacity делает работы, я сам тестировал его и работает как шарм.
В идеале, что я думаю, должно быть, что 1000 вызовов «setTimeout» должны быть помещены в «стек», причем первый из них устанавливает непрозрачность низкого уровня без тайм-аута, второй устанавливает непрозрачность немного выше с небольшим таймаутом , вплоть до последнего вызова, который задает непрозрачность до 1000 с тайм-аутом 3000.
В принципе, он должен установить непрозрачность 0 сразу, до ~ 333 за 1 секунду, до ~ 666 за 2 секунды и до 1000 секунд за 3 секунды. Я думаю, что моя логика звучит здесь; вызовы для настройки непрозрачности должны решаться со временем, что создает эффект затухания.
Так вот код Релевент:
<script language='JavaScript' type='text/JavaScript'>
//takes a value from 0-1000
function setContentOpacity(value) {
document.getElementById('content').style.opacity = value/1000;
document.getElementById('content').style.filter = 'alpha(opacity=' + value/10 + ')';
}
function fadeInContent(){
setContentOpacity(0);
for (var i=0;i<=1000;i++)
{
setTimeout(function(){setContentOpacity(i);}, (i*3));
}
}
onload=fadeInContent;
</script>
(примечание: я попытался назвать просто SetTimeout (setContentOpacity (я), (я * 3)) ;, но это не похоже на работу, и я получил немного лучшие результаты, используя анонимную функцию)
Подумайте, что здесь не так? Заранее спасибо!
Вы бы лучше нашли способ для setContentOpacity вызвать следующий тайм-аут. Использование for-loop означает, что вы используете 1000 таймеров одновременно. Я не знаю, если это плохо, но это звучит страшно. –
«Я не знаю, плохо ли это, но это звучит страшно». Это хорошая цитата, я собираюсь это запомнить. Да, я думал о том, чтобы сделать это несколько рекурсивно, я мог бы просто сделать это – Nathan