ПОЛНАЯ СТРАНИЦА.JS Получить .активный слайд и обновить номер на каждом новом слайде

#javascript #jquery #slideshow #counter #fullpage.js

#javascript #jquery #слайд-шоу #счетчик #fullpage.js

Вопрос:

Я пытаюсь получить

 current slide / total slides
  

на Fullpage.js и обновлять текущий слайд при каждом изменении слайда.

Я абсолютный новичок в Javascript и пытаюсь обойти этот код. Цифры отображаются, но они не обновляют каждое изменение слайда.

 $(function() {

var sections = $('.section');
updateCurrentIndex(); //on document.ready and on each slidechange
function updateCurrentIndex() {
sections.each(function() {
  var section = $(this),
    sectionSlides = section.find('.slide'),
    totalItems = sectionSlides.length,
    currentIndex = sectionSlides.filter('.active').index()   1,
    numContainer = section.find('.num'); //assuming you have numContainers in every section

  numContainer.html("0"   currentIndex   ' / '   totalItems);
});
}
});
  

Любая помощь была бы очень признательна.

https://jsfiddle.net/0hLzxrea/66/

Ответ №1:

Вы должны использовать fullPage.js обратные вызовы, такие как onSlideLeave или afterSlideLoad .

Например:

 $('#fullpage').fullpage({
     anchors: ['firstPage', 'secondPage', 'thirdPage', 'fourthPage', 'lastPage'],

     afterSlideLoad: function( anchorLink, index, slideAnchor, slideIndex){
        var loadedSlide = $(this);
        var totalItems = loadedSlide.siblings().length;
        var numContainer = loadedSlide.closest('.fp-section').find('.num');
        numContainer.html("0"   slideIndex   ' / '   totalItems);
    }
});
  

Обновление декабрь 2021 — fullpage.js v3

Теперь это намного проще с новыми методами getActiveSlide и getActiveSection тем fullPage.js обеспечивает. Смотрите документы для получения дополнительной информации.

Codepen онлайн

 new fullpage("#fullpage", {
  sectionsColor: ["yellow", "orange", "#C0C0C0", "#ADD8E6"],
  anchors: ["firstPage", "secondPage", "thirdPage", "fourthPage", "lastPage"],
  slidesNavigation: true,
  afterSlideLoad: function (origin, destination, direction) {
    setCounter();
  },
  afterRender: function(){
    setCounter();
  }
});

function setCounter(){
    var sectionItem = fullpage_api.getActiveSection().item;
    var numSlides = sectionItem.querySelectorAll(".fp-slide").length;
    var currentSlideWrapper = document.querySelector(".counter");
    var slideNumber = fullpage_api.getActiveSlide().index   1;
    currentSlideWrapper.innerHTML = "0"   slideNumber   " / "   numSlides;
}

  

Комментарии:

1. Спасибо @Alvaro, я только что обновил свою скрипку, и, похоже, она не работает jsfiddle.net/0hLzxrea/68

2. .Num был в разделе, а не на слайде, как я думал. Проверьте это здесь: jsfiddle.net/0hLzxrea/69 Также обновил ответ.

3. Большое тебе спасибо @Alvaro, ты сделал мой день! Просто вкратце, что, если .num находится за пределами #fullpage? Есть ли простой способ найти и обновить его?

4. Да, просто измените селектор: loadedSlide.closest('.fp-section').find('.num'); . Пожалуйста, примите ответ, если он решил вашу проблему, чтобы другие могли узнать об этом.

5. единственная проблема, с которой я все еще сталкиваюсь, заключается в том, что счетчик не обновляется / перезапускается при изменении раздела.

Ответ №2:

В данный момент я здесь, и я уверен, что очень близок к решению. Проблема, по-прежнему, заключается в том, что если вы перейдете к предыдущему разделу, счетчик всегда будет 01 / XX вместо отображения номера фактического .активного слайда.

 afterLoad: function(index, nextIndex, direction) {
  var loadedSlide = $(this);
  var slideIndex = find(".fp-slide .active")   1;
  var totalItems = loadedSlide.closest(".fp-section").find(".fp-slide").length;
  var numContainer = loadedSlide.closest(document).find(".num");
  numContainer.html("0"   slideIndex   " / "   "0"   totalItems);
},
onLeave: function(index, nextIndex, direction) {
  var section = $(this),
    sectionSlides = section.find(".slide"),
    totalItems = sectionSlides.length,
    currentIndex = sectionSlides.filter(".fp-slide .active").length   1,
    numContainer = section.closest(document).find(".num");
  numContainer.html("0"   currentIndex   ' / '   "0"   totalItems);
}
})
});
  

https://jsfiddle.net/0hLzxrea/71/