Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.07.2018, 07:44
Интересующийся
Отправить личное сообщение для komned37 Посмотреть профиль Найти все сообщения от komned37
 
Регистрация: 23.07.2018
Сообщений: 18

залипание слайдера при повторном вызове в всплывающем окне
Добрый день!

Подскажите пожалуйста что не так в коде.

Есть разметка страницы:
<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();

  });

Подскажите пожалуйста что может быть не так, думаю что на закрытие нужно поставить какую-нибудь функцию очистки типо кеша или кода, чтоб в след раз все загружалось как в первый раз.
Ответить с цитированием
  #2 (permalink)  
Старый 25.07.2018, 10:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

komned37,
Особо не вникал, но на первый взгляд:
В строке 2 $(".items .item").hide() - м.б. еще и класс active удалить?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Флэш галерея во всплывающем окне mendosa Общие вопросы Javascript 8 14.07.2011 10:51
Открыть в новом окне, а при повторном нажатии обновить то же старое-новое окно libinstyle Events/DOM/Window 2 05.04.2010 20:13
Открытие картинки в новом окне при клике на ссылку. J77 Общие вопросы Javascript 2 08.12.2009 08:09
Выделение текста при использовании слайдера x00xer Firefox/Mozilla 8 29.09.2009 07:45
SetTimeout не принимает параметр при повторном вызове 2dkott Общие вопросы Javascript 15 08.09.2009 16:37