Показать сообщение отдельно
  #1 (permalink)  
Старый 19.10.2019, 18:40
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Как поправить правильный счёт процентов в слайдере?
Сделал простой слайдер, если листать следующий слайдер, то показываются проценты (количество просмотреных слайдов) и отображается с глюками.

Если пролисать до последнего слайда, покажет 100% и если сделать шаг назад, то останется это же количество и если потом опять нажать вперёд, то покажет не все проценты, при просмотре всех слайдов.

И если промотать на первый слайд, то покажет 17%, а по идеи должно быть 0.

Я взял всё количество слайдов "allQuestion", узнал текущий слайд "openSlide.dataset.numberQuestion" и из этого посчитал проценты



<style>
    .next-question {
        border: 1px solid;
        margin-bottom: 20px;

        width: 400px;
        height: 400px;
        text-align: center;
        vertical-align: middle;
    }

    .open {
        display: block;
    }
</style>

<div></div>
<div style="" class="next-question open" data-number-question="1">
    Слайд 1             
</div>

<div style="display: none;" class="next-question" data-number-question="2">
    Слайд 2            
</div>

<div style="display: none;" class="next-question" data-number-question="3">
    Слайд 3            
</div>

<div style="display: none;" class="next-question" data-number-question="4">
    Слайд 4            
</div>

<div style="display: none;" class="next-question" data-number-question="5">
    Слайд 5            
</div>

<div style="display: none;" class="next-question" data-number-question="6">
    Слайд 6            
</div>
<div></div>


<button class="quiz-buttons__button_prev">Назад</button>
<button class="quiz-buttons__button_next-text">Вперёд</button>
<br><br>
<span class="percent">0%</span> <span>просмотрено</span>



<script>

    var allQuestion = document.querySelectorAll('.next-question');
    var percent = document.querySelector('.percent');
    var nextQuestion = document.querySelector('.quiz-buttons__button_next-text');
    var prevQuestion = document.querySelector('.quiz-buttons__button_prev');

    var allQuestion = document.querySelectorAll('.next-question');
    
    function closeQuestion() {
        allQuestion.forEach(function (question, i) {
            question.style.display = 'none';
        })
    }

    function openClose(element) {
        var openSlide = document.querySelector('.open');
        if (element == 'nextElementSibling') {
            var nextElement = openSlide.nextElementSibling;
        } else {
            var nextElement = openSlide.previousElementSibling;
        }
        
        
        //проценты
        percent.innerHTML = (openSlide.dataset.numberQuestion / allQuestion.length * 100).toFixed() + '%';

        numberQuestion = openSlide.dataset.numberQuestion;
        
        if (nextElement.hasAttribute('data-number-question')) {
            closeQuestion();

            openSlide.classList.remove('open');
            nextElement.style.display = 'block';
            nextElement.classList.add('open');
        }



    }


    nextQuestion.addEventListener('click', function (e) {
        openClose('nextElementSibling');
    });


    prevQuestion.addEventListener('click', function (e) {
        openClose('previousElementSibling');
    });
</script>
Ответить с цитированием