Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как сделать "загрузка..." (https://javascript.ru/forum/dom-window/7331-kak-sdelat-zagruzka.html)

ffx 27.01.2010 01:01

как сделать "загрузка..."
 
в общем решил я по маленьку изучить js и начал с написания такого скрипта как "загрузка..."
что мне надо, чтобы изменялось количество точек, то есть
Код:

загрузка
загрузка.
загрузка..
загрузка...

поискал не нашел
вот то что смог накалякать, но почемуто после первого же прохождения цикла он выдает всего лиш то что в document.write
document.write("loading")
            for (i = 1; i < 4; i++) {
                setTimeout('document.write(".")', 1000)                
            }

Gvozd 27.01.2010 01:26

http://javascript.ru/tutorial/dom/modify
http://innerhtml.ru/

document.write() работает так как вы ожидаете только до загрузки страницы. после нее, он просто переписывает заново страницу

subzey 27.01.2010 01:51

Важно понять специфику работы setTimeout и document.write.

document.write добавляет в документ текст, будет вставлен после закрывающего </script> в текущем блоке скрипта:
<script type="text/javascript">
document.write("[docwrite]");
</script>
<script type="text/javascript">
alert(document.body.innerHTML);
</script>

Ну если документ уже закрыт (т.е., считывание его кода завершено), он откроет новый, пустой, и запишет туда.

setTimeout не останавливает работу скрипта. Эта функция лишь говорит браузеру запустить что-то, по возможности, через столько-то времени.
Код
for (i = 1; i < 4; i++) { 
	setTimeout('document.write(".")', 1000)                 
}

на самом деле запустит все три функции приблизительно через секунду.

Получить нечто похожее на желаемый результат у Вас получится только если setTimeout сработает раньше, чем завершится обработка тега <script>, т.е., фактически почти никогда и в зависимости от фазы Луны.
(Если точнее, то в Firefox с задержкой выполнения скрипта модальным окном.)

Используйте заместо этого изменение innerHTML у элемента:
<script type="text/javascript">
document.write("Загрузка");
for (var i = 1; i < 4; i++){
setTimeout(function(){document.body.innerHTML += "."}, i * 1000)
}
</script>

ffx 27.01.2010 13:18

так а чтобы удалить, какую функцию надо вызвать?
<script type="text/javascript">
document.write("Загрузка");
while (true) {
for (var i = 1; i < 4; i++){
setTimeout(function(){document.body.innerHTML += "."}, i * 1000)
}
функция удаления точек
}
	</script>
и так правильно организовывать бесконечный цикл?

subzey 27.01.2010 14:23

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

Помните, документ в яваскрипт не очень-то похож на консольное окошко, и некоторые задачи, которые для изучения, скажем, C поставляются в начале учебника, в javascript могут оказаться извратом.

ffx 27.01.2010 14:27

спасибо. ща учу, вообще запутался в этих методах, объектах, функция О_О
php давался намного легче

JsLoveR 27.01.2010 15:17

Цитата:

Сообщение от ffx
так а чтобы удалить, какую функцию надо вызвать?
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 <script type="text/javascript">
2 document.write("Загрузка");
3 while (true) {
4 for (var i = 1; i < 4; i++){
5 setTimeout(function(){document.body.innerHTML += "."}, i * 1000)
6 }
7 функция удаления точек
8 }
9 </script>
и так правильно организовывать бесконечный цикл?

Не нужно бесконечно цыклить браузер, он тупо зависнет

JsLoveR 27.01.2010 15:17

<script type="text/javascript">
	
var points=0;
var timeRset = setTimeout("timeR()",1000);

	function timeR()
{
  points++;
  timeRset=setTimeout("timeR()",1000);
  document.getElementById("load").innerHTML +=".";
if(points==4){document.getElementById("load").innerHTML =""; points=0;}

 }
          

    </script>


<p  >Загрузка<span id="load"></span></p>

JsLoveR 27.01.2010 15:18

ffx,
Если будут вопросы, я объясню

ffx 27.01.2010 15:55

JsLoveR,
спасибо
не понимаю зачем это
var timeRset = setTimeout("timeR()",1000);
почему нельзя просто запустить
timeR()
при такой конструкции се работает но с ошибкой
document.getElementById("load") is null


Часовой пояс GMT +3, время: 20:54.