У меня есть две функции, которые показывают / скрывают элементы за счет манипуляции классами и css переходами:
$.fn.animatedClose = function() {
this.addClass('closing');
this.each(function(index, element) {
element.closingTimeout = setTimeout(function() {
$(element).removeClass('opened closing');
}, getCssNumber($(element), 'transition-duration'));
});
return this;
}
$.fn.animatedOpen = function() {
this.each(function(index, element) {
clearTimeout(element.closingTimeout);
$(element).removeClass('closing').addClass('opened');
});
return this;
}
Также имеется функция, которая производит аналогичные манипуляции одновременно с "элементом с контентом" и "элементом навигации", используя предыдущие две функции (просто потому что в моем коде много случаев, когда используются именно два таких элемента):
function controlToggle(element, toggle, manOpen) {
if (!manOpen) {
toggle.removeClass('active');
element.animatedClose();
}
else {
toggle.addClass('active');
element.animatedOpen();
}
}
И, наконец, функция сделанная специально для слайдеров. Она скрывает все слайды ("элементы с контентом") и делает неактивными все элементы навигации, кроме тех, что указанны в аргументах. А их, соответственно, показывает и делает активными:
function slide(slides, navAll, navClicked) {
var slideActive = slides.eq(navClicked.index());
controlToggle(slides.not(slideActive), navAll.not(navClicked), false);
controlToggle(slideActive, navClicked, true);
}
В общем я создал слайдер, который имеет три элемента навигации и три соответствующих им слайда. Собственно, сама проблема: когда я нажимаю на все три элемента навигации так, что последний нажимается до того, как скрылся первый слайд, последний слайд начинает скрываться где-то за 0.1 секунды до скрытия первого (весь переход длится секунду). И это происходит с любым количеством слайдов.
Продвижение своими сайтами как стратегия роста и независимости