Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таймер
 
 автор: hammet   (26.05.2007 в 13:06)   письмо автору
 
 

Я не силен в JS. Мне нужно чтобы при нажатии на ссылку "скачать" файл эта ссылка на 5 секунд заменялась анимированным гифом (loading bar). Затем возвращалась на место ссылка.
Накидал вот такую ф-ю. Но при запуске браузер жутко тупит и говорит что скрипт следует остановить.


function Loading(id) {
      var div = document.getElementById('loadingBar'+id);     
      var date = new Date();
      var sec = date.getSeconds();
      var offset = 3;
      var flag = true;
      
      div.innerHTML = '<img src="images/loading.gif">';
      while(flag = true) {
          var curr = date.getSeconds();
          if(curr > (sec+offset)) {
              div.innerHTML = '<a href="download.php?file={$song.id}" onClick="Loading({$song.id})">Скачать</a>';
              flag = false;
          }
      }
            
  }


Кто подскажет, что не так?

   
 
 автор: bronenos   (26.05.2007 в 13:10)   письмо автору
 
   для: hammet   (26.05.2007 в 13:06)
 

while (flag) сделайте
это Smarty? странно переменные вставлены

   
 
 автор: hammet   (26.05.2007 в 13:21)   письмо автору
 
   для: bronenos   (26.05.2007 в 13:10)
 

Да, это Smarty. Почему же странно?

зы Это не помогло. Браузер ругается

Скрипт на этой странице привёл к перегрузке KHTML. Если он продолжит работать, другие приложения будут отзываться медленнее.
Прервать работу скрипта?

   
 
 автор: ilyaILF   (26.05.2007 в 14:06)   письмо автору
 
   для: hammet   (26.05.2007 в 13:06)
 

В вашей функции получается, что время с компьютера пользователя "снимается" только один раз, при вызове функции и далее не меняется, нужно использовать функции JavaScript setTimeout или setInterval, код может выглядет примерно следующим образом:
<script type="text/javascript">
var flag=0, interval;
function Loading(id) {
var div = document.getElementById('loadingBar'+id);
if(flag=='0'){
    div.innerHTML = '<img src="images/loading.gif">';
    flag=1;
    interval=setInterval("Loading("+id+")",3000);
    }
    else{
    div.innerHTML = '';
    div.innerHTML = '<a href="download.php?file={$song.id}" style="background: red; display: block; height: 100%;" onClick="Loading()"' + '>Скачать<' + '/a>'; 
    flag = 0; 
    clearInterval(interval);
    interval=0;
    }
}
</script>
<div id="loadingBar2" style="width: 100px; height: 100px; background-color: pink;" onclick="Loading(2)"></div>
Внимательно посмотрите запись onClick на появляющейся через 3 сек ссылке, эта запись вызывает ошибку.

   
 
 автор: hammet   (26.05.2007 в 14:12)   письмо автору
 
   для: ilyaILF   (26.05.2007 в 14:06)
 

Да, действительно. Я разобрался, большое спасибо!

   
 
 автор: hammet   (26.05.2007 в 14:24)   письмо автору
 
   для: hammet   (26.05.2007 в 14:12)
 

Скажите, а есть ли возможность на javascript перехватить наступление события когда браузер выдает диалог Сохранить/открыть файл?

   
 
 автор: ilyaILF   (26.05.2007 в 14:54)   письмо автору
 
   для: hammet   (26.05.2007 в 14:24)
 

Если вы имеете в виду при клике по ссылке - то можно, нужно обработать событие click, которое наступает при нажатии на ссылку:
<a title="Загрузить" href="26996_86.zip" onclick="alert('Я перехватил событие!');return false;">26996- 86</a>
Вместо alert() вы можете написать обращение к произвольным функциям или выполнить определенный код javascript.

   
 
 автор: hammet   (26.05.2007 в 15:03)   письмо автору
 
   для: ilyaILF   (26.05.2007 в 14:54)
 

Нет, я не настолько плох в JS :)
Я имею ввиду после нажатия на ссылку подгружается файл и выдается пользователю для закачки.
Появляется окошко с вопросом (Сохранить/Открыть в.... файл).
У меня оч сложный механизм загрузки файла, через 1 сервера и буффер ) Поэтому пока пользовател ожидает загрузки, я ему выдаю анимированную гифку.
Но пока что длительность ее отображения я считаю через коэфф. в зависимости от р-ра файла.
Т.е. чем больше размер файла - тем дольше он подгружается, тем дольше должна отображаться gif-ка.
Исчезнуть она должна в тот момент когда выскочит диалоговое окошко.
Вот я и спрашиваю - может можно как то перехватить это событие, т.е. появление этого самого окошка.

   
 
 автор: ilyaILF   (26.05.2007 в 16:05)   письмо автору
 
   для: hammet   (26.05.2007 в 15:03)
 

Вот как-раз в соседней теме "Как событие подобрать" обсуждали iframe... А что если вам сделать "невидимый" iframe за пределами экрана и направить действие вашей ссылки в iframe (target="myIframe") и тогда вы сможете перехватить момент окончания загрузки (как-раз когда всплывает стандартное окно броузера) по return false; Я не пробовал, но можно поэкспериментировать.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования