Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перелистывание изображений (https://javascript.ru/forum/misc/48294-perelistyvanie-izobrazhenijj.html)

dulingleb 28.06.2014 12:52

Перелистывание изображений
 
Добра!

var current = ($('div#rotator ul li.show') ?  $('div#rotator ul li.show') : $('div#rotator ul li:first'));	 
	var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div#rotator ul li:first') : current.next()) : $('div#rotator ul li:first'));


Я хотел бы попросить подробно описать данный код. Я знаю что он высчитывает текущее изображение и следующее. Знаю что двоеточие это фильтр, но все равно не могу понять суть. Может кто нибудь может подробно описать, просто хочу сделать чтобы еще можно было перелистывать картинки и назад, а чтоб это сделать нужно вникнуть в этот код и по сделать по подобию.

Заранее спасибо!

jsnb 28.06.2014 14:08

Вот этот код без тернарных операторов:
var current;
if ( $('div#rotator ul li.show') ) {
  current = $('div#rotator ul li.show');
} else {
  current = $('div#rotator ul li:first'));
}

var next;
if ( current.next().length ) {
  if ( current.next().hasClass('show') ) {
    next = $('div#rotator ul li:first');
  } else {
    next = current.next();
  }
} else {
  next = $('div#rotator ul li:first');
}

Вроде всё и так очевидно. Хотя первое условия весьма странное, ибо всегда будет выполняться... Возможно там length забыли.

рони 28.06.2014 15:08

dulingleb,
http://javascript.ru/forum/jquery/47...tml#post311109

dulingleb 28.06.2014 15:31

Спасибо jsnb, так куда более понятно. На основе вашего кода я смог написать перелистывание предыдущей картинки:

var current;
	if ( $('div#rotator ul li.show') ) {
	  current = $('div#rotator ul li.show');
	} else {
	  current = $('div#rotator ul li:first');
	}
	
	var prev;
	if ( current.index() != 0) {
		prev = current.prev("li");  
	} else {
		prev = $('div#rotator ul li:last');
	}

jsnb 28.06.2014 15:51

Цитата:

Сообщение от dulingleb (Сообщение 318482)
Спасибо jsnb, так куда более понятно. На основе вашего кода я смог написать перелистывание предыдущей картинки:

var current;
	if ( $('div#rotator ul li.show') ) {
	  current = $('div#rotator ul li.show');
	} else {
	  current = $('div#rotator ul li:first');
	}
	
	var prev;
	if ( current.index() != 0) {
		prev = current.prev("li");  
	} else {
		prev = $('div#rotator ul li:last');
	}

Всё-таки мне кажется, что первое условие должно было выглядеть так:
if ( $('div#rotator ul li.show').length ) {

т.к. в текущем варианте оно абсолютно бессмысленно т.к. всегда истинно.

dulingleb 28.06.2014 15:58

скорее всего оно верно, я думаю там подразумевается если вдруг не будет класса show, то оно присвоит этот класс первому элементу.

jsnb 28.06.2014 16:03

Цитата:

Сообщение от dulingleb (Сообщение 318485)
скорее всего оно верно, я думаю там подразумевается если вдруг не будет класса show, то оно присвоит этот класс первому элементу.

if ( $('div#rotator ul li.show') )

Это будет всегда истинным т.к. $('div#rotator ul li.show') создает объект jQuery независимо от того будут найдены элементы удовлетворяющие селектору или нет. А объект при логическом преобразовании всегда дает true.
А вот если сделать так:
if ( $('div#rotator ul li.show').length )

то это условие будет выполнено только если будет найден хоть один элемент удовлетворяющий селекторы (элемент списка с классом show).

рони 28.06.2014 16:13

dulingleb,
а чем код в 3 посте неподошёл там и вперед и назад хоть залистайся

dulingleb 28.06.2014 23:02

Цитата:

Сообщение от jsnb (Сообщение 318487)
if ( $('div#rotator ul li.show') )

Это будет всегда истинным т.к. $('div#rotator ul li.show') создает объект jQuery независимо от того будут найдены элементы удовлетворяющие селектору или нет. А объект при логическом преобразовании всегда дает true.
А вот если сделать так:
if ( $('div#rotator ul li.show').length )

то это условие будет выполнено только если будет найден хоть один элемент удовлетворяющий селекторы (элемент списка с классом show).

а, ну теперь понятно, буду знать, я просто js уже как 3 день учу, по этому еще в нем не очень так


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