Javascript.RU

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

Индикация загрузки во время выполнения функции
Не могу нормально сформулировать запрос в гугле и найти конкретную информацию.
У меня есть функция, которая может выполнятся около 30 секунд, нужно сделать что-то на подобии анимированной индикации во время выполнения функции.

Как я представляю реализацию:
function my(){
document.getElementById('something').hidden = false;

//Тело функции

document.getElementById('something').hidden = true;
}

А скрывать и показывать что-то вроде этого.

Но боюсь, что здесь будет непорядок с потоками и асинхронностью.
Подскажите, как правильно сделать. А то чувствую, что это велосипед.
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2015, 08:06
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

KiZZek,
Если функция асинхронная то используйте промисы:

var togglePreloader = function () {
  alert('Спрятали/показали прелоадер');
}

var longFunction = function () {
  togglePreloader();
  return new Promise(function (resolve) {
    // Тело функции
    setTimeout(resolve, 2000); // Вместо таймаута вызывайте resolve в конце рассчетов/запросов и т.д.
  });
};

longFunction().then(function () {
  alert('Расчет закончен');
  togglePreloader();
});
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2015, 16:05
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 182

а я в подобных случаях делаю функцию с самовызовом через нулевой таймаут.
setTimeout(function(){}, 0) выполнит указанную функцию сразу по окончании текущей функции. При этом происходит разрыв цепочки выполнения и интерфейс может обновиться. Во-вторых, это позволяет избежать проблем с уведомлением о зависшей функции, особенно в IE с его "гениальным" способом определения зависа. В-третьих, этот способ будет поддерживаться бОльшим количеством браузеров.
Если же функция использует какой-либо циклический код, а является так сказать набором последовательных команд, ее можно разбить на несколько частей и вызывать эти части друг за другом.

Из минусов - более громоздкий код.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Google Chrome перерисовка страницы во время выполнения скрипта Dekart Javascript под браузер 0 08.06.2010 08:35
Что происходит с символами во время выполнения запроса? Yazla Общие вопросы Javascript 4 11.12.2009 17:09
Нужно добавить блокировку ссылки на время выполнения скрипта aidka Events/DOM/Window 1 02.08.2009 20:11
разное время выполнения операции ropowek Events/DOM/Window 2 08.10.2008 13:27
как отобразить в окне значения счетчика во время выполнения цикла FOR Алекс97 Общие вопросы Javascript 5 06.09.2008 10:36