|
|
|
| Я не силен в 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;
}
}
}
|
Кто подскажет, что не так? | |
|
|
|
|
|
|
|
для: hammet
(26.05.2007 в 13:06)
| | while (flag) сделайте
это Smarty? странно переменные вставлены | |
|
|
|
|
|
|
|
для: bronenos
(26.05.2007 в 13:10)
| | Да, это Smarty. Почему же странно?
зы Это не помогло. Браузер ругается
Скрипт на этой странице привёл к перегрузке KHTML. Если он продолжит работать, другие приложения будут отзываться медленнее.
Прервать работу скрипта? | |
|
|
|
|
|
|
|
для: 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 сек ссылке, эта запись вызывает ошибку. | |
|
|
|
|
|
|
|
для: ilyaILF
(26.05.2007 в 14:06)
| | Да, действительно. Я разобрался, большое спасибо! | |
|
|
|
|
|
|
|
для: hammet
(26.05.2007 в 14:12)
| | Скажите, а есть ли возможность на javascript перехватить наступление события когда браузер выдает диалог Сохранить/открыть файл? | |
|
|
|
|
|
|
|
для: hammet
(26.05.2007 в 14:24)
| | Если вы имеете в виду при клике по ссылке - то можно, нужно обработать событие click, которое наступает при нажатии на ссылку:
<a title="Загрузить" href="26996_86.zip" onclick="alert('Я перехватил событие!');return false;">26996- 86</a>
| Вместо alert() вы можете написать обращение к произвольным функциям или выполнить определенный код javascript. | |
|
|
|
|
|
|
|
для: ilyaILF
(26.05.2007 в 14:54)
| | Нет, я не настолько плох в JS :)
Я имею ввиду после нажатия на ссылку подгружается файл и выдается пользователю для закачки.
Появляется окошко с вопросом (Сохранить/Открыть в.... файл).
У меня оч сложный механизм загрузки файла, через 1 сервера и буффер ) Поэтому пока пользовател ожидает загрузки, я ему выдаю анимированную гифку.
Но пока что длительность ее отображения я считаю через коэфф. в зависимости от р-ра файла.
Т.е. чем больше размер файла - тем дольше он подгружается, тем дольше должна отображаться gif-ка.
Исчезнуть она должна в тот момент когда выскочит диалоговое окошко.
Вот я и спрашиваю - может можно как то перехватить это событие, т.е. появление этого самого окошка. | |
|
|
|
|
|
|
|
для: hammet
(26.05.2007 в 15:03)
| | Вот как-раз в соседней теме "Как событие подобрать" обсуждали iframe... А что если вам сделать "невидимый" iframe за пределами экрана и направить действие вашей ссылки в iframe (target="myIframe") и тогда вы сможете перехватить момент окончания загрузки (как-раз когда всплывает стандартное окно броузера) по return false; Я не пробовал, но можно поэкспериментировать. | |
|
|
|