w = val * 100 / max;
- ширина в процентах, если бы была одна линия.
Линий 4, то есть на каждую по 25%
ceil(w / 25)
кол-во полностью закрашенных частей
(w % 25) * 100 / 25
- ширина в процентах частично закрашенной части
Итого, функция вычисления ширины полоски в каждой части может выглядеть как-то так:
/**
* chapter - номер полоски, от 1 до 4
* val - текущее значение
* max - максимальное значение
* Возвращает ширину полоски в процентах
*/
getWidth(chapter, val, max) {
const CHAPTERS = 4;
const p = 100 / CHAPTERS;
let full = Math.ceil(w / p);
let w = val * 100 / max;
if (chapter <= full) return 100;
if (chapter === full + 1) return (w % p) * 100 / p;
return 0;
}
<div class="chapter-progress"
:style="{width: getWidth(chapter, property.value, property.maxValue)+'%'}"
></div>