залипание слайдера при повторном вызове в всплывающем окне
Добрый день!
Подскажите пожалуйста что не так в коде. Есть разметка страницы: <div class="item-box"> <div class="proektu-item"></div> <div class="proektu-item"></div> </div> <div class="item-box"> <div class="proektu-item"></div> <div class="proektu-item"></div> </div><div class="item-box"> <div class="proektu-item"></div> <div class="proektu-item"></div> </div> <div class="item"> <div class="item-wrap"> <div class="item-close"><i class="icon-cancel"></i></div> <div class="slider"> <div class="slider-nav"> <span class="slider-left"></span> <span class="slider-right"></span> </div> <div class="slider-wrap"> <div class="slides"> <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> </div> </div> </div> <div class="slider-dots"></div> </div> </div> <div class="item"> <div class="item-wrap"> <div class="item-close"><i class="icon-cancel"></i></div> <div class="slider"> <div class="slider-nav"> <span class="slider-left"></span> <span class="slider-right"></span> </div> <div class="slider-wrap"> <div class="slides"> <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> </div> </div> </div> <div class="slider-dots"></div> </div> </div> <div class="item"> <div class="item-wrap"> <div class="item-close"><i class="icon-cancel"></i></div> <div class="slider"> <div class="slider-nav"> <span class="slider-left"></span> <span class="slider-right"></span> </div> <div class="slider-wrap"> <div class="slides"> <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> </div> </div> </div> <div class="slider-dots"></div> </div> </div> функционал таков: изначально все item скрыты,отображаются только item-box и вложенные блоки proektu-item. По клику на один из proektu-item во всплывающем окне загружается item, соответствующий его порядковому номеру. Блок item содержит слайдер с навигацией по слайдам, слайды можно полистать, посмотреть и потом закрыть весь блок item. Во время первого вызова блока item все работает хорошо, а вот при повторном вызове этого же блока навигация по слайдам во время перелистывания сходит с ума, перескакивает через точку, а потом и вовсе исчезает. Если открыть другой item, то на первый раз все работает хорошо, а вот с повторного все едет. код всплывающей формы такой: $(".proektu-item").click(function() { $(".items .item").hide().eq($(".proektu-item").index(this)).fadeIn().addClass('active'); $(document).ready(function sliderItems() { // Ждём загрузки страницы var slideCount = $('.items .item.active .slider .slides .slide').length; //количество слайдов for (var n=0; n<slideCount; n++) // Цикл добавляет буллеты в блок .bullets { html=$('.item.active .slider-dots').html() + '<div class="slider-dot"></div>'; // К текущему содержимому прибавляется один буллет $('.item.active .slider-dots').html(html); // и добавляется в код }; var j = 0; $('.item.active .slider-dots .slider-dot').eq(j).addClass('active'); }); $(function(){ var slides = $(".item.active .slider .slides").children(".slide"); // Получаем массив всех слайдов var width = $(".item.active .slider-wrap").width(); // Получаем ширину видимой области var i = slides.length; // Получаем количество слайдов var offset = i * width; // Задаем начальное смещение и ширину всех слайдов i--; // уменьшаем кол-во слайдов на один ( для проверки в будущем ) $(".item.active .slider .slides").css('width',offset); // Задаем блоку со слайдами ширину всех слайдов offset = 0; // Обнуляем смещение, так как показывается начала 1 слайд $(".item.active .slider-right").click(function(){ // Событие клика на кнопку "следующий слайд" if (offset < width * i) { // Проверяем, дошли ли мы до конца offset += width; // Увеличиваем смещение до следующего слайда $(".item.active .slider .slides").css("transform","translate3d(-"+offset+"px, 0px, 0px)"); // Смещаем блок со слайдами к следующему $('.item.active .slider-dots .slider-dot.active').next('.slider-dot').addClass('active'); $('.item.active .slider-dots .slider-dot.active').eq(0).removeClass('active'); } }); $(".item.active .slider-left").click(function(){ // Событие клика на кнопку "предыдущий слайд" if (offset > 0) { // Проверяем, дошли ли мы до конца offset -= width; // Уменьшаем смещение до предыдущего слайда $(".item.active .slider .slides").css("transform","translate3d(-"+offset+"px, 0px, 0px)"); // Смещаем блок со слайдами к предыдущему $('.item.active .slider-dots .slider-dot.active').prev('.slider-dot').addClass('active'); $('.item.active .slider-dots .slider-dot.active').eq(1).removeClass('active'); } }); $('.item.active .slider-dots .slider-dot').click(function(){ $('.item.active .slider-dots .slider-dot').removeClass('active').eq($(this).index()).addClass('active'); // if (offset < width * i) { // Проверяем, дошли ли мы до конца offset += -offset+width*$(this).index(); // Увеличиваем смещение до следующего слайда $(".item.active .slider .slides").css("transform","translate3d(-"+offset+"px, 0px, 0px)"); }); }); }); $(".icon-cancel").click(function(){ $(".item.active .slider .slides").css("transform","translate3d(-"+0+"px, 0px, 0px)"); $('.item.active .slider-dots .slider-dot.active').remove('active'); $(".items .item.active").fadeOut("slow").removeClass('active'); $('.item .slider-dots .slider-dot').remove(); }); Подскажите пожалуйста что может быть не так, думаю что на закрытие нужно поставить какую-нибудь функцию очистки типо кеша или кода, чтоб в след раз все загружалось как в первый раз. |
komned37,
Особо не вникал, но на первый взгляд: В строке 2 $(".items .item").hide() - м.б. еще и класс active удалить? |
Часовой пояс GMT +3, время: 16:20. |