Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   для новостного слайдшоу jQuery (https://javascript.ru/forum/misc/14666-dlya-novostnogo-slajjdshou-jquery.html)

qwermjk 25.01.2011 15:52

для новостного слайдшоу jQuery
 
Долго думал, и решил всётки спросить у вас, мож ктонить знает как это реализовать. У меня идёт автоматическое слайдшоу через функцию сетинтервал, при клике мне нужно её остановить и если не было долгое время кликов, то заного должно запускаться слайдшоу.
var intervalID = setInterval(nextNewsAuto, time); // запускает авто слайдшоу
$(this).click(function() { //клик по следующей новости
   clearInterval(ttt); //удаляем сетинтервал
   $(this).each(nextNews); //при клике запустилась следующая новость
// а тут нужно чтобы через некоторое время запускалась функция nextNewsAuto и при клике чтобы она останавливалась
});
Кусок кода, можно сказать ключевой в реализации, остальное как бы не очень важно ....

Shaci 25.01.2011 16:18

мало кода,
может через settimeout какой-нибудь запускать, хз.

qwermjk 25.01.2011 16:23

кода достаточно, это основной кусок, где всё и должно происходить, а в остальное вникать нет смысла так как там ещё 50 строк кода.

qwermjk 25.01.2011 16:28

nextNewsAuto - эта функция автоматически запускает слайдшоу.
nextNews - эта функция для ручного просмотра новостей.

Этот кусок кода работает так:
1) setInterval заставляет новость меняться каждые time секунд
2) При клике на следующую новость срабатывает clearInterval, который убирает авто смену новостей
3) следом идёт смена новости при клике.
А дальше нужно чёнить придумать, чтобы через секунд 30 бездействия снова включалась функция nextNewsAuto

qwermjk 25.01.2011 16:33

Нужно ещё учесть то что при повторном клике этот весь код, который находится внутри анонимной функции, повторяется.

x-yuri 25.01.2011 22:36

Цитата:

Сообщение от qwermjk
при клике мне нужно её остановить и если не было долгое время кликов, то заного должно запускаться слайдшоу.

если пользователь остановил - это значит что он хочет, чтобы слайдшоу остановилось, а не запускалось вновь. Пусть даже спустя какое-то время

qwermjk 25.01.2011 22:42

Через пару часов мозговой атаки я решил эту проблему =)
Как было:
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 нормально вызывается, без накладок, если идёт повторный клик то прошлый сеттаймаут удаляется ...

qwermjk 25.01.2011 22:44

x-yuri, у меня как бы новостное слайдшоу, и типо остановка эта нужна чтобы новость какое то время не переключалась и оставалась видна и чтобы пользователь её прочёл, если интересен весь код, то я его доделаю и могу кинуть сюда, там целый плагин для jQuery

x-yuri 25.01.2011 23:28

может быть, ты и прав. Только лучше сделать как-нибудь так (второе демо). А именно: остановка при наведении мышки и возможность перейти на произвольный блок

qwermjk 26.01.2011 00:03

Ну остановку с помощью мыши нужно будет потом сделать =)
Вот что получилось труд двух дней http://nbatote.ru/test/

x-yuri 26.01.2011 00:15

а чего такая анимация медленная? Сами фотографии - второстепенно? А в остальном ничо так, особенно Стив Неш доставляет :)

qwermjk 26.01.2011 07:27

Вроде нормально, раз в 10 секунд переключает, как понять второстепенно?

x-yuri 26.01.2011 08:17

я имею в виду не интервал между переключениями, а продолжительность анимации. Она слишком длинная. Пока оно переключается, начинаешь думать об анимации, как будто анимация - это то, что ты хотел показать. Но ты ведь хотел показать фотографии. Или я не прав? ;)

qwermjk 26.01.2011 08:25

Я как бы сделал новостное слайдшоу, типо как на nba.com

x-yuri 26.01.2011 08:33

отлично, и всего лишь добавил длинную анимацию. Почему они такую не добавили?

qwermjk 26.01.2011 09:41

Ну картинка появляется 2 секунды, как бы покрасивее чем просто сразу ... В плагине который я написал, это всё настраивается, достаточно только дописать
$(document).ready(function() {
   $('#QMminiNews img').QMnews({
      auto: true,
      tfi: 1000 // или что бы сразу появлялась поставить 0
   });
});

qwermjk 26.01.2011 11:03

Щас уже немножко по-другому выглядит
$(document).ready(function() {
   $('#QMminiNews img').QMnews();
});
Стандартные настройки:
Авто переключение новостей - Включено (автоматического/ручное)
Позиция название новости - Снизу (снизу/сверху)
Время которое требуется для переключения новости - 10 секунд
Время через которое новости заново автоматически переключаются - 10 секунд, в итоге 10+10=20
Время которое нужно для появления большой картинки - 1 секунда
Вот так вот стало выглядеть http://nbatote.ru/test/

x-yuri 26.01.2011 16:15

так лучше :) еще у меня в опере (последней) в первый раз не появляется вторая картинка

qwermjk 26.01.2011 20:45

Таже фигня и в моей опере, даже и не знаю из за чего это может быть =) Щас поищу ...

qwermjk 26.01.2011 21:05

Кароче отследил последовательность действий и выяснилось что функция load(); в первый раз в опере что т не работает, не знаю почему.
А есть какая нить функция чтобы можно было эти картинки ещё до полной загрузки документа занести в память компьютера??

qwermjk 26.01.2011 21:14

Вместо load() поставил each(), не знаю как это отразится у пользователя с медленным инетом ... проверить не могу, у меня 10 мб/с, но работает зато нормально =)


Часовой пояс GMT +3, время: 04:55.