#html #css
#HTML #css — код
Вопрос:
Я создал масштаб, показанный на изображении ниже, используя чистый HTML и CSS. Отметки в нижней части шкалы взяты из массива, который я просматриваю. Теперь мне нужна функциональность, при которой изначально столбцы будут пустыми, но когда я нажимаю, скажем, на 3, столбцы 1,2,3 должны быть заполнены желтым цветом, а круг должен переместиться на 3, подобно тому, что происходит на этом сайте, если вы прокрутите немного вниз и пройдете тест. Кто-нибудь может, пожалуйста, помочь мне достичь этого или направить меня в правильном направлении?
<div class="rating-type__bar">
<div class="rating-type__circle"></div>
<div class="rating-type__bar-wrapper rating-type__bar-left" *ngFor="let opt of _element.options">
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 100%; opacity: 1;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">5</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 80%; opacity: 0.8;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">4</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 60%; opacity: 0.6;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">3</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 40%; opacity: 0.4;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">2</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 20%; opacity: 0.2;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">1</div>
</div>
</div>
<div class="rating-type__bar-wrapper rating-type__bar-center">
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 10%; opacity: 0.1;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">0</div>
</div>
</div>
<div class="rating-type__bar-wrapper rating-type__bar-right">
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 20%; opacity: 0.2;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">1</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 40%; opacity: 0.4;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">2</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 60%; opacity: 0.6;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">3</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 80%; opacity: 0.8;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">4</div>
</div>
<div class="rating-type__pipe rating-type__pipe--active">
<div class="rating-type__pipe-pillar">
<span style="height: 100%; opacity: 1;" class="rating-type__pipe-pillar-bg"></span>
</div>
<div class="rating-type__pipe-text">5</div>
</div>
</div>
</div>
Комментарии:
1. Вы должны предоставить свой код, чтобы кто-то мог рассказать, как вы реализовали эту шкалу. Изображения недостаточно.
2. CSS также был бы полезен для упрощения воспроизведения
3. Если вы хотите реализовать что-то вроде этой диаграммы, я думаю, вы на неверном пути. Это просто фон с изменяемым размером наложения. Подробнее: Есть 2 слоя, серые полосы внизу и цветные сверху. Событие мыши изменит размер верхнего элемента.
Ответ №1:
Не могу ответить на этот вопрос, но я потратил на это около часа, так что я мог бы также поделиться своим прогрессом:
"use strict";
const bars = document.getElementsByClassName("bar"),
barCovers = document.getElementsByClassName("bar-cover");
for (let i = 5; i > -6; i--) {
const bar = bars[Math.abs(i - 5)];
bar.style.left = Math.abs(i - 5) * 20 40 "px";
bar.style.height = (Math.abs(i) 1) * 7 "px";
const barCover = barCovers[Math.abs(i - 5)];
barCover.style.left = Math.abs(i - 5) * 20 40 "px";
barCover.style.height = (Math.abs(i) 1) * 7 "px";
barCover.style.backgroundColor = "#d5e312";
//barCover.style.width = "0px";
//barCover.style.display = "none";
}
const slider = document.getElementById("slider");
slider.style.position = "absolute";
slider.style.left = "37px";
slider.style.width = "218px";
slider.style.bottom = "150px";
setInterval(() => {
const middleBar = barCovers[5];
if (slider.value < 50) {
const width =
(Math.abs(slider.value - 50) < 5
? Math.abs(slider.value - 50)
: 4) * 2;
middleBar.style.width = width "px";
middleBar.style.left = 148 - width "px";
} else if (slider.value > 50) {
middleBar.style.left = "148px";
middleBar.style.width =
(slider.value - 50 < 5
? slider.value - 50
: 4) * 2 "px";
} else {
middleBar.style.width = "0px";
}
/*for (let i = 5; i > -6; i--) {
if (i !== 0) {
const barCover = barCovers[Math.abs(i - 5)];
if (slider.value - 50 < -i * 7 amp;amp; i > 0) {
const width =
(Math.abs(slider.value - 50) - i * 6.8 < 17
? Math.abs(slider.value - 50) - i * 6.8
: 16);
barCover.style.width = width "px";
barCover.style.left = 155 - i * 19.5 - width "px";
} else {
barCover.style.width = "0px";
}
}
}*/
for (let i = 5; i > -6; i--) {
if (i !== 0) {
const barCover = barCovers[Math.abs(i - 5)];
if (slider.value - 50 < -i * 7) {
barCover.style.display = "block";
} else {
barCover.style.display = "none";
}
}
}
}, 50);
body, html {
border: none;
margin: 0px;
}
.temp {
position: absolute;
width: 6px;
height: 10px;
bottom: 100px;
border-radius: 3px;
background-color: #000000;
}
.bar, .bar-cover {
position: absolute;
width: 16px;
bottom: 100px;
background-color: #000000;
}
#slider {
background: #000000;
}
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<div class="bar-cover"></div>
<input type="range" id="slider"/>