Как сделать замену цвета каждого элемента независимо друг от друга?
Есть сайт https://www.nouvolo.com/products/sleevedcablemod, и у них сделан конструктор проводов, при выборе цвета, выбираешь какой провод покрасить. как это реализовано? Пробовал через color picker, получается какая то белиберда...
Ответы (1 шт):
Автор решения: Deonis
→ Ссылка
У них это реализовано примерно так:
const radios = [...colors.querySelectorAll('input')];
radios.forEach(c => {
c.nextElementSibling.style.backgroundColor = c.value;
});
cables.addEventListener('click', e => {
let cc = radios.filter(c => c.checked);
if (e.target.nodeName === 'LI' && cc.length) {
e.target.style.backgroundColor = cc[0].value;
}
});
#cables {
padding: 0;
max-width: 350px;
}
#cables li {
margin: 5px;
height: 15px;
list-style: none;
background-color: #999;
cursor: pointer;
}
#colors label {
display: inline-block;
width: 50px;
height: 50px;
border-radius: 50%;
cursor: pointer;
}
#colors input {
display: none;
}
#colors input:checked+label {
box-shadow: 0 0 0 2px #000, inset 0px 0px 0 2px #fff;
}
<ul id="cables">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<div id="colors">
<input id="color-grey" name="color" type="radio" value="#999" checked>
<label for="color-grey"></label>
<input id="color-red" name="color" type="radio" value="red">
<label for="color-red"></label>
<input id="color-blue" name="color" type="radio" value="blue">
<label for="color-blue"></label>
<input id="color-green" name="color" type="radio" value="green">
<label for="color-green"></label>
<input id="color-orange" name="color" type="radio" value="#ff8000">
<label for="color-orange"></label>
</div>
При клике на "провод", берется цвет из значения отмеченной радиокнопки (переключателя)