css переменные всегда должны иметь двойное da sh в начале их имен. Лично я нахожу пример скрученным на YouTube, для того же результата я вижу такие вещи:
const pRessBar = document.getElementById('ressBar')
function setRessBar_percent(val) { // 0 <= val <= 100
pRessBar.style.setProperty('--pwidth', `${val}%`)
pRessBar.dataset.label = (val<100)? 'Loading...' : 'Loading completed ;-)'
}
/* test part */
inSiz.oninput=_=>
{
inSiz.nextSibling.textContent = `${inSiz.value}%`
setRessBar_percent(inSiz.value)
}
#ressBar {
box-sizing: border-box;
position: relative;
width: 500px;
--pwidth: 50%;
height: 3em;
background-color: #111;
margin: 1em auto;
border-radius: 1.5em;
color: white;
border: .5em solid #111; ; /* try red color */
overflow: hidden;
}
#ressBar::before {
position: absolute;
top: 0;
left: calc( -100% + var(--pwidth) );
content: '';
width: 100%;
height: 100%;
background-color: #069;
border-radius: 1em;
}
#ressBar::after {
content: attr(data-label);
position: absolute;
left: 1em;
top: 0;
height: 2em;
line-height: 2em;
}
/* test part */
#inSiz {
margin : 1em;
width: 200px;
}
<div Id="ressBar" data-label="Loading..."></div>
<!-- test part -->
<hr>
<p>play with this range : <p>
<input id="inSiz" type="range" value="50" min="0" max="100" step="1"><span>50%</span> (supposed value for the progress bar)
<p> to test the appearance of the progress bar<p>
позвольте мне выбрать ваш мозг и попытаться разобрать это на части.
no Проблема ami go;)
- double da sh имеет смысл, но я подумал, что JavaScript не любит тире или других определенных символов.
это просто в do c, а для javascript это не символ или что-то еще, а просто строка
Использование CSS настраиваемых свойств (переменных) == doc == или для == JS part ==
поэтому #ressBar :: before используется для ширины, которая изменяется, а #ressBar :: after - для текста «Загрузка ...»?
текст «Загрузка ... "находится в ::after
, в то время как индикатор выполнения находится в ::before
, поэтому он отображается ниже.
Объединение текста и индикатора выполнения - плохая идея: если прогресс равен нулю, то текст не может отображаться в пустом пространстве
есть ли причина, по которой вычисление «ширины» происходит под левым и правым?
в моем коде синяя полоса width: 100%
его родителя. Он просто "перемещается" более или менее вправо в зависимости от запрошенного значения прогресса.
избыточная часть относится к left
с отрицательным значением его родительского элемента (#ressBar {
который, как правило, имеет css: overflow: hidden;
два преимущества: 1- вы просто делаете размер, который хотите, на родительском элементе без каких-либо других css изменений 2- синяя полоса не имеет css проблем с border-radius: 1em;
, когда ее размер меньше 1em
Я не понимаю, как работает часть JavaScript. Я понимаю pRessBar, но я не понимаю ваш комментарий со ссылкой на 0 <= val <= 0 ИЛИ синтаксис для setProperty `` '$ {val}%' `` </li>
0 <= val <= 0
является ошибкой и должен быть 0 <= val <= 100
, т.е. аргумент val должен быть от 0 до 100
$ {val}% это нормальное использование аргументов в литералах шаблона if val == 45 получилось 45% (% - это просто персонаж, похожий на другой)