Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Грамотное построение карусели (https://javascript.ru/forum/dom-window/39285-gramotnoe-postroenie-karuseli.html)

AfraidAlex 24.06.2013 11:18

Цитата:

Сообщение от skrudjmakdak (Сообщение 258114)
попробуйте так:
$('.slider .prev').click(function() { // Влево
		if (parseInt($(this).next('ul').css('marginLeft'), 10) != '0') {			
			$(this).next('ul').stop(false, true).animate({
				marginLeft: totWidth + parseInt(slide.parent().css('marginLeft'), 10)
			} ,300)
		} else { // назад не заезжаем
			$(this).next('ul').stop(false, true).animate({marginLeft: -(totWidth)*(slide.length-1)}, 300)
		}
else console.log(1);
	});


посмотрите, в консоль ничего не валится??

не оффтопьте, плиз. Мне не нужно искать ошибки в коде, мне нужна помощь в доработке кода



Цитата:

Сообщение от vadim5june (Сообщение 258112)
Попробуйте использовать в animate функцию complete
задаем глобальную переменную var aa=0;
$('.slider .next').click(function() { if(aa!=0)return;aa=1;//
а по завершении анимации в функции complete aa=1
-----------------
идея на время анимации запретить клики на prev и next

Спасибо! То, что нужно

skrudjmakdak 24.06.2013 11:22

я вам и показываю, в каком месте у вас не доработка

AfraidAlex 24.06.2013 11:30

else console.log(1);
в середине функции - к какому if оно относится? Извините, но вы написали бред.
Код доработал, спасибо vadim5june!


$(document).ready(function() {
$('.slider ul').each(function() { // ширина каруселек
child = $(this).children('li');
$(this).width(child.length * (child.width() + parseInt(child.css('marginLeft'), 10) + parseInt(child.css('marginRight'), 10) ) );
$(this).after('<div class="next"></div>').before('<div class="prev"></div>')
});
aa=true;
slide=$('.slider ul li');
mLeft=parseInt(slide.css('marginLeft'), 10);
mRight=parseInt(slide.css('marginRight'), 10);
totWidth=mLeft+mRight+slide.width(); // Полная длинна одного слайда

$('.slider .next').click(function() { // Вправо
if ($(this).prev('ul').css('marginLeft') != -(totWidth)*(slide.length-1)+'px' && aa) {
aa=false;
$(this).prev('ul').stop(false, true).animate({
marginLeft: -(totWidth)+parseInt(slide.parent().css('marginLeft '), 10)
}, 300, function() {aa=true});
} else { if(aa) {// вперед не заезжаем
$(this).prev('ul').stop(false, true).animate({marginLeft: 0}, 300);
}
}
})

$('.slider .prev').click(function() { // Влево
if (parseInt($(this).next('ul').css('marginLeft'), 10) != '0' && aa) {
aa=false;
$(this).next('ul').stop(false, true).animate({
marginLeft: totWidth + parseInt(slide.parent().css('marginLeft'), 10)
} ,300, function() {aa=true})
} else { if(aa) { // назад не заезжаем
$(this).next('ul').stop(false, true).animate({marginLeft: -(totWidth)*(slide.length-1)}, 300)
}
}
});

});

skrudjmakdak 24.06.2013 11:42

согласен, не доглядел. я просто к такому стилю закрыванию\открыванию кавычек не привык. огляделся

AfraidAlex 24.06.2013 12:05

Цитата:

Сообщение от skrudjmakdak (Сообщение 258118)
согласен, не доглядел. я просто к такому стилю закрыванию\открыванию кавычек не привык. огляделся

Все равно спасибо за попытки помочь :)


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