@givemoneybiatch
Немного веб, немного гейм

Почему не увеличивается style.width?

Хочу нарисовать прогресс бар, который будет увеличиваться в ширине исходя из текущих значений инпутов.
Складываем значения инпутов и получаем шаг step. Определяем процент шага от порогового значения и на этот процент увеличиваем ширину прогресс бара. Но взамен получаю 0 вместо новой ширины. Почему так?
<form action="" class="form">
  <div class="input-field">
    <span>New temperature in freezer</span>
    <input id="inputFreezeTemp" type="number" class="input" min="-50" max="0" value="-15">
  </div>
  <div class="input-field">
    <span>New overall temperature</span>
    <input id="inputOverallTemp" type="number" class="input" min="-20" max="0" value="-5">
  </div>
</form>
<div id="progressBar" class="progress-bar"></div>


.progress-bar {
  width: 0;
  height: 20px;
  background: red;
}


//получаем значения из инпутов
        var inputFreezeTemp = document.getElementById("inputFreezeTemp");
        var inputOverallTemp = document.getElementById("inputOverallTemp");

        function getCurrentTemps() {
          var array = {
            inputFreezeTemp: inputFreezeTemp.innerHTML,
            inputOverallTemp: inputOverallTemp.innerHTML
          }
          return array;
        }

        var valueX = 1000; // некое абстрактное пороговое значение
        var valueCurrent = 0;
        var progressBar = document.getElementById("progressBar");
        
        // через определенные промежутки времени пересчитываем ширину и заносим ее в стили прогресс бара
        setInterval(function() {
          if (valueCurrent <= valueX) {
            var currentTemps = getCurrentTemps();
            //некая абстрактная скорость увеличения, берется из инпутов
            var step = (-currentTemps.inputFreezeTemp) + (-currentTemps.inputOverallTemp); 
            var per = step / valueX;
            valueCurrent += step;
            progressBar.style.width += per * 100 + '%';
            // в консоли выводится 0
            console.log(progressBar.style.width);
          }
        }, 3000);


https://jsfiddle.net/wpx1xy62/1/

UPD: https://jsfiddle.net/wpx1xy62/3/
  • Вопрос задан
  • 226 просмотров
Решения вопроса 1
@Faliah
Вот так работает. Проблема в том, что вы пытались работать с progressBar.style.width как с числом, но оно является строкой, при этом DOM API не дает устанавливать некорректное значение этого атрибута, которое, с каждой итерацией у вас представляло бы вот такую запись "2%4%6%" и т.д
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы