Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2014, 10:02
Новичок на форуме
Отправить личное сообщение для xayleks Посмотреть профиль Найти все сообщения от xayleks
 
Регистрация: 02.11.2014
Сообщений: 3

Отложенные действия
Приветствую всех.
Только начал заниматься изучением javascript, поэтому заранее прошу сильно не пинать.

Задался таким вот вопросом. Вроде примитивный а реализовать не могу.
Назовем его "Индикатор загрузки"
Нужно реализовать индикатор который бы показывал сначала одну точку, короткий промежуток времени, две точки, короткий промежуток времени, три точки, короткий промежуток времени, одна точка... итд
Скрипт я представляю себе примерно как то так:

var dotted;
dotted = [".", "..", "..."];
function dottA() {
    var i;
    for(i=0; i<3; i++) {
        console.log(dotted[i]);
        if(i===2){dottA();}
    }    
}
dottA();


но так вывод получается оч быстрым. Как отложить действие вывода на тот самый секундный интервал?
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2014, 10:05
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

http://learn.javascript.ru/settimeout-setinterval
И зачем ты используешь строгое сравнение, когда заведомо известно, что переменная будет числом?
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2014, 10:06
Аватар для animhotep
Профессор
Отправить личное сообщение для animhotep Посмотреть профиль Найти все сообщения от animhotep
 
Регистрация: 17.01.2013
Сообщений: 887

http://javascript.ru/setInterval
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2014, 10:30
Новичок на форуме
Отправить личное сообщение для xayleks Посмотреть профиль Найти все сообщения от xayleks
 
Регистрация: 02.11.2014
Сообщений: 3

Спасибо, я понимаю что нужно применить сетТаймаут, только вот не пойму как
var dotted;
dotted = [".", "..", "..."];
function dottA() {
    var i;
    for(i=0; i<3; i++) {
    setTimeout(console.log(dotted[i]), 1000);        
        if(i==2){dottA();}
    }    
}
dottA();

так получается что вывод каждой строки откладывается на 1 секунду, но по сути между выводом строк интервал остаётся тоже.
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2014, 10:31
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
так получается что вывод каждой строки откладывается на 1 секунду, но по сути между выводом строк интервал остаётся тоже.
Ну ты же думай, что делаешь. В функцию setTimeout первым аргументом надо передавать либо другую функцию-коллбек, либо строку с кодом, а ты отправляешь результат console.log(), это во-первых. Во-вторых, setTimeout не задерживает выполнение кода, а устанавливает то, что должно выполниться через некоторое время. У тебя выходит одномоментная инициализация трех таймеров по циклу, которые так же одномоментно выполнятся через одну секунду.
<span id="indicator"></span>
<script>
(function(maxDots) {
  var indicator = document.getElementById("indicator");
  var step = 0;

  setInterval(function() {
    indicator.innerHTML = (new Array((step++ % maxDots) + 2)).join("*");
  }, 1000);
})(3);
</script>

Последний раз редактировалось Erolast, 02.11.2014 в 10:40.
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2014, 10:46
Новичок на форуме
Отправить личное сообщение для xayleks Посмотреть профиль Найти все сообщения от xayleks
 
Регистрация: 02.11.2014
Сообщений: 3

Огромное спасибо, свою ошибку понял. В мыслях даже не было что так сильно можно упросить код. Безсомнений плюсану
Ответить с цитированием
  #7 (permalink)  
Старый 02.11.2014, 19:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от xayleks
Нужно реализовать индикатор который бы показывал сначала одну точку, короткий промежуток времени, две точки, короткий промежуток времени, три точки, короткий промежуток времени, одна точка... итд
Нарисуйте гифку и не парьтесь. Кроме того много еще вариантов. Но точки рисовать ява-скриптом? Тогда делайте worker'а.
Ответить с цитированием
  #8 (permalink)  
Старый 03.11.2014, 06:51
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Очевидно же, что задача в учебных целях поставлена.

Последний раз редактировалось Erolast, 03.11.2014 в 08:47.
Ответить с цитированием
  #9 (permalink)  
Старый 03.11.2014, 09:37
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

И не callback та самая функция, ее даже может не быть https://developer.mozilla.org/en-US/...ers.setTimeout

Последний раз редактировалось kostyanet, 03.11.2014 в 09:39.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Остановка выполнения скрипта до определенного действия пользователя. Matisumi Общие вопросы Javascript 3 28.01.2013 00:21
Определения действия Forum3 Events/DOM/Window 4 16.01.2012 11:35
Совершение действия через опредилённое время. (Sandr) Общие вопросы Javascript 15 15.04.2011 23:40
Отложенные вычисления в JavaScript Kolyaj Общие вопросы Javascript 16 28.09.2010 09:43
После первого действия скрипт перестает работать cyberx jQuery 6 12.06.2010 22:04