Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2008, 19:31   #1
Mr. Demetrius
phelgmatic sceptic
 
Регистрация: 10.03.2008
Сообщений: 7
По умолчанию Работа с таймерами

JavaScript. Ф-ия show() показывает картинку. Ф-ия kill() её удаляет. Как сделать чтобы каждые, к примеру, 5 секунд вызывалась фи-ия show() и через каждые 6 секунд после этого вызывалась ф-ия kill()? Поясню, эффект должен быть следующий: каждые пять секунд появляется картинка на шесть секунд.

Я пробовал использовать ф-ии setTimeout()/setInterval, но ничего не получилось: то картинки не удалялись, а вылазили и вылазили каждые пять секунд, то они наооборот не успевают вылазить и "удалялись несуществующие объекты"... :?
Mr. Demetrius вне форума Ответить с цитированием
Старый 15.03.2008, 23:42   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Внутри функции kill() в конце вставить:
Код HTML:
window.setTimeout('show()',5000);
Внутри функции show() вставить:
Код HTML:
window.setTimeout('kill()',6000);
Тег <body> сделать вида: <body onload='show();'>
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 16.03.2008, 17:00   #3
Mr. Demetrius
phelgmatic sceptic
 
Регистрация: 10.03.2008
Сообщений: 7
По умолчанию

После двух показываний/скрываний картинок появляется следующая ошибка:
Цитата:
Timeout thread: delay 2000 ms
Error:
name: ReferenceError
message: Statement on line 1: Reference to undefined variable: kill
Backtrace:
Line 1 of unknown script
kill();
Mr. Demetrius вне форума Ответить с цитированием
Старый 16.03.2008, 17:09   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вам не кажется, что ваше условие
Цитата:
каждые пять секунд появляется картинка на шесть секунд
изначально невыполнимо?
Может быть, все-таки так:
каждые одиннадцать секунд появляется картинка на шесть секунд ?
Тогда у вас будет - 6 секунд есть картинка, 5 секунд - нет картинки...
Нарисуйте простенькую временную диаграмму (ось времени с отсечками для событий) и определитесь с интервалами...
mihali4 вне форума Ответить с цитированием
Старый 16.03.2008, 17:44   #5
Mr. Demetrius
phelgmatic sceptic
 
Регистрация: 10.03.2008
Сообщений: 7
По умолчанию

Вы правы. Однако, изменение временных параметров не устранило проблемы. Точнее, старую проблему оно устранило - ошибка больше не появляется, но появилась новая. Теперь смена картинок работает только два раза. После двух появлений/исчезновений картинка застывает.
Mr. Demetrius вне форума Ответить с цитированием
Старый 16.03.2008, 19:20   #6
Mr. Demetrius
phelgmatic sceptic
 
Регистрация: 10.03.2008
Сообщений: 7
По умолчанию

Чёрт, я совсем с этими таймерами запутался!

Почему не работает:
Цитата:
<SCRIPT LANGUAGE="JavaScript">
function show()
{
document.writeln("hi");
setTimeout("show()", 1000);
}
window.onload=show();
</SCRIPT>
Никто не в курсе?

Вначале появляется "хай", потом, через секунду, он заменяется на"хай" (заметно мелькание) и всё! Больше не заменяется!
Mr. Demetrius вне форума Ответить с цитированием
Старый 16.03.2008, 22:14   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Из учебника:
Цитата:
SetTimeout - выполняет то или иное действие (функцию, проверку) единожды по истечении указанного промежутка времени в миллисекундах
Цитата:
SetInterval - выполняет то или иное действие (функцию, проверку) каждый раз по истечении указанного промежутка времени в миллисекундах
Ну, а про ClearTimeout и ClearInterval, надеюсь, сами посмотрите.
Этого набора вполне хватает для вашей задачи.

Последний раз редактировалось mihali4; 16.03.2008 в 22:17.
mihali4 вне форума Ответить с цитированием
Старый 16.03.2008, 22:29   #8
Mr. Demetrius
phelgmatic sceptic
 
Регистрация: 10.03.2008
Сообщений: 7
По умолчанию

Ну, думаю, до того, чтобы порыться в учебнике, я мог бы додуматься и сам...

В этот раз вы не поняли сути проблемы. Функция setTimeout() выполняется в теле функции, которую она же и вызывает. На лицо имеем рекурсию. То, что она не работает - это уже другое дело.


Однако, в проблеме я уже разобрался: такая рекурсия не работает только с методом document.write() Со всеми остальными методами и функциями всё работает отлично.

Всем спасибо за помощь.
Mr. Demetrius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц