Изменение ширины элемента на js в %

279
11 октября 2017, 07:14

Столкнулся с такой проблемой, пока добавляю ширину в px все порядке, а в процентах выходит какая то ерунда.

Должно каждый этап добавляться 25% к ширине progress-bar

https://codepen.io/s0nly/pen/GMxPrX

function stepByStepForm() {
    var nextStepBtn = $('.next-btn'),
        prevStepBtn = $('.prev-btn'),
        step = $('.step'),
        stepField = $('.step__field');
    nextStepBtn.on('click', function (e) {
        var progressBarValue = $('.progress-bar').width(),
            progressBarStep = parseInt(progressBarValue += 100 / step.length);
        e.preventDefault();
        if($(this).parent().find(stepField).val().length <= 0){
            alert('Не заполнены поля')
        } else{
            $('.progress-bar').width(progressBarStep + '%');
            step.fadeOut(0);
            $(this).parent().next(step).show();
        }
    });
    prevStepBtn.on('click', function (e) {
        e.preventDefault();
            step.fadeOut(0);
            $(this).parent().prev(step).show();
    });
}
stepByStepForm();
Answer 1

Вот так вам было нужно?

Ваша ошибка была здесь progressBarStep = parseInt(progressBarValue += 100 / step.length);.

progressBarValue это значение в пикселях, и не важно в стиле вы как добавили свойство для ширины у блока. у вас пиксели прибавлялись к процентам, и получилась ошибка.

var stepp = 0; 
function stepByStepForm() { 
    var nextStepBtn = $('.next-btn'), 
            prevStepBtn = $('.prev-btn'), 
            step = $('.step'), 
            stepField = $('.step__field'); 
 
    nextStepBtn.on('click', function(e) { 
        stepp = stepp + 1; 
        var percent = parseInt(100/step.length); 
        console.log(percent); 
        var progressBarStep = stepp * percent; 
        e.preventDefault(); 
        if ($(this).parent().find(stepField).val().length <= 0) { 
            alert('Не заполнены поля') 
        } else { 
            $('.progress-bar').width(progressBarStep + '%'); 
            step.fadeOut(0); 
            $(this).parent().next(step).show(); 
        } 
    }); 
 
    prevStepBtn.on('click', function(e) { 
        stepp--; 
        var progressBarStep = stepp * 25; 
        $('.progress-bar').width(progressBarStep + '%'); 
        e.preventDefault(); 
        step.fadeOut(0); 
        $(this).parent().prev(step).show(); 
    }); 
} 
 
stepByStepForm();
.progress-bar{ 
  height: 20px; 
  width: 0%; 
  background: green; 
  transition: .5s width; 
} 
 
.step.first{ 
  display: block; 
} 
 
.step{ 
  display: none; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="form"> 
    <form action=""> 
 
        <div class="progress-bar"></div> 
 
        <div class="step first"> 
            <label> 
                <input type="text" placeholder="1" class="step__field"> 
            </label> 
 
            <a href="" class="next-btn">Далее</a> 
        </div> 
        <div class="step"> 
 
            <label> 
                <input type="text" placeholder="2" class="step__field"> 
            </label> 
 
            <a href="" class="prev-btn">Назад</a> 
            <a href="" class="next-btn">Далее</a> 
        </div> 
        <div class="step"> 
            <label> 
                <input type="text" placeholder="3" class="step__field"> 
            </label> 
            <a href="" class="prev-btn">Назад</a> 
            <a href="" class="next-btn">Далее</a> 
        </div> 
        <div class="step"> 
            <label> 
                <input type="text" placeholder="3" class="step__field"> 
            </label> 
            <a href="" class="prev-btn">Назад</a> 
            <a href="" class="next-btn">Далее</a> 
        </div> 
        <div class="step"> 
            end 
        </div> 
    </form> 
</div>

Вот так уже определяются проценты по количеству шагов.

READ ALSO
Настройка плагина календаря FullCalendar

Настройка плагина календаря FullCalendar

Использую плагин календаря https://fullcalendario/

417
вопрос про flex (Css)

вопрос про flex (Css)

Здравствуйте, есть блок с width 100% (адаптивная верстка), так вот в нём есть 4 блока, как можно сделать чтобы 3й и 4й были на всю длину и переносились...

252
Большое количество подключений script

Большое количество подключений script

Насколько мне известно, каждое подключение файлов css или js отбирает память у компьютераА как много он отбирает? К примеру, нашел сайт в сети...

215
Проблема с CheckBox (multiple)

Проблема с CheckBox (multiple)

Здравствуйте,

304