Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Постепенное исчезновение сообщений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ПТО
Отправлено: 24 Декабря, 2013 - 16:25:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 395
Дата рег-ции: Янв. 2012  


Помог: 3 раз(а)




CODE (html):
скопировать код в буфер обмена
  1. <div id="message">
  2.     <div class="message">Текст сообщения</div>
  3.     <div class="message">Текст сообщения 2</div>
  4. </div>

Написал так: elem - элемент сообщения, slow - время в мс
CODE (javascript):
скопировать код в буфер обмена
  1. function fadeOut(elem, slow) {
  2.     elem.style.opacity = elem.style.opacity - 0.01;
  3.     if (elem.style.opacity > 0) {
  4.         window.setTimeout(function() {
  5.             fadeOut(elem, slow);
  6.         }, slow);
  7.     } else {
  8.         elem.style.display = 'none';
  9.     }
  10. }

Для запуска в любом нужном мне месте запускаю так:
CODE (javascript):
скопировать код в буфер обмена
  1. window.setTimeout(function() {
  2.     var message = document.getElementById("message");
  3.     fadeOut(message, 30);
  4. }, 15000);

Гаснуть начинает через 15 сек.
Теперь что не получилось:
Если в течение 15 секунд выводится еще сообщение, то оно начинает гаснуть не за 15 сек, а за оставшееся время, скажем, секунды через 3.
Надо
По-хитрому запустить функцию, чтобы при последующем запуске ее предыдущее выполнение прервалось. Желательно на чистом js
 
 Top
IllusionMH
Отправлено: 24 Декабря, 2013 - 16:40:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




ПТО, clearTimeout.
 
 Top
SAD
Отправлено: 24 Декабря, 2013 - 16:40:23
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1.     function fadeOut(elem, slow) {
  2.         elem.style.opacity = elem.style.opacity - 0.01;
  3.         if (elem.style.opacity > 0) {
  4.             clearTimeout(elem.getAttribute('data-timer'));
  5.        
  6.             elem.setAttribute('data-timer', setTimeout(function() {
  7.                 fadeOut(elem, slow);
  8.             }, slow));            
  9.         } else {
  10.             elem.style.display = 'none';
  11.             elem.removeAttribute('data-timer');
  12.         }
  13.     }

(Добавление)
хотя, это не то в Вашем случае
 
 Top
ПТО
Отправлено: 24 Декабря, 2013 - 16:47:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 395
Дата рег-ции: Янв. 2012  


Помог: 3 раз(а)




Спасибо, сейчас приспособим )))
 
 Top
SAD
Отправлено: 24 Декабря, 2013 - 16:53:40
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. function hideElem(elem, timeout) {
  2.     var timer = elem.getAttribute('data-timer');
  3.    
  4.     if (typeof timer !== 'undefined') {
  5.         clearTimeout(timer);
  6.  
  7.         elem.style.opacity = 1;
  8.     }
  9.  
  10.     elem.setAttribute('data-timer', setTimeout(function () {
  11.         fadeOut(elem, 30);
  12.     }), timeout);
  13. }
  14.  
  15. var message = document.getElementById("message");
  16.  
  17. вызывать hideElem(message, 15000)

(Отредактировано автором: 24 Декабря, 2013 - 17:04:41)

 
 Top
ПТО
Отправлено: 24 Декабря, 2013 - 19:29:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 395
Дата рег-ции: Янв. 2012  


Помог: 3 раз(а)




Спасибо, IllusionMH, спасибо SAD
Вот конечный вариант (мой, два типа сообщений, все работает)
1) сделал не через атрибут, а через свойство
2) Нужны оба кода, что писал SAD, так как сообщению назначается setInterval дважды: при вызове через промежуток времени (15 сек) и при "погасании" в течении 3 сек
3)при погасании убрал удаление timeoutId - оно все равно перезаписывается, а во втором блоке кода - не нужен.
Цитата:
При передаче несуществующего или уже выполненного timeoutID - ничего не происходит, исключение не генерируется.

4) и самое главное: удаление timeoutId происходит при вызове hideElem (в моем случае "em") в начале
5) Повысил карму SAD до 46 Хорошо
Спойлер (Отобразить)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB