для новостного слайдшоу jQuery
Долго думал, и решил всётки спросить у вас, мож ктонить знает как это реализовать. У меня идёт автоматическое слайдшоу через функцию сетинтервал, при клике мне нужно её остановить и если не было долгое время кликов, то заного должно запускаться слайдшоу.
var intervalID = setInterval(nextNewsAuto, time); // запускает авто слайдшоу $(this).click(function() { //клик по следующей новости clearInterval(ttt); //удаляем сетинтервал $(this).each(nextNews); //при клике запустилась следующая новость // а тут нужно чтобы через некоторое время запускалась функция nextNewsAuto и при клике чтобы она останавливалась });Кусок кода, можно сказать ключевой в реализации, остальное как бы не очень важно .... |
мало кода,
может через settimeout какой-нибудь запускать, хз. |
кода достаточно, это основной кусок, где всё и должно происходить, а в остальное вникать нет смысла так как там ещё 50 строк кода.
|
nextNewsAuto - эта функция автоматически запускает слайдшоу.
nextNews - эта функция для ручного просмотра новостей. Этот кусок кода работает так: 1) setInterval заставляет новость меняться каждые time секунд 2) При клике на следующую новость срабатывает clearInterval, который убирает авто смену новостей 3) следом идёт смена новости при клике. А дальше нужно чёнить придумать, чтобы через секунд 30 бездействия снова включалась функция nextNewsAuto |
Нужно ещё учесть то что при повторном клике этот весь код, который находится внутри анонимной функции, повторяется.
|
Цитата:
|
Через пару часов мозговой атаки я решил эту проблему =)
Как было: var intervalID = setInterval(nextNewsAuto, time); $(this).click(function() { clearInterval(ttt); $(this).each(nextNews); });Недостатки: Нужно было чтобы после клика заново, через некоторое время, запускалась функция nextNewsAuto и чтобы прошлый сетинтервал удалялся, чтоб не было накладок. Как стало: function ffff() { var intervalID = setInterval(nextNewsAuto, time); return intervalID; } var ttt = ffff(), ddd = 0, rrr = 0; $(this).click(function() { if(ddd == 0) { ddd = 1; clearInterval(ttt); rrr = setTimeout(function() { ttt = ffff(); ddd = 0; }, 10000); } else { clearInterval(rrr); rrr = setTimeout(function() { ttt = ffff(); ddd = 0; }, 10000); } $(this).each(nextNews); });Достоинства: Теперь всё нормально, функция nextNewsAuto нормально вызывается, без накладок, если идёт повторный клик то прошлый сеттаймаут удаляется ... |
x-yuri, у меня как бы новостное слайдшоу, и типо остановка эта нужна чтобы новость какое то время не переключалась и оставалась видна и чтобы пользователь её прочёл, если интересен весь код, то я его доделаю и могу кинуть сюда, там целый плагин для jQuery
|
может быть, ты и прав. Только лучше сделать как-нибудь так (второе демо). А именно: остановка при наведении мышки и возможность перейти на произвольный блок
|
Ну остановку с помощью мыши нужно будет потом сделать =)
Вот что получилось труд двух дней http://nbatote.ru/test/ |
Часовой пояс GMT +3, время: 22:58. |