Я хочу, чтобы при нажатии на деталь машины (например, капот) открылся блок с категориями повреждений и стоимостью за ремонт именно этой детали (именно капота). Ну и соответственно, также с другими деталями.
Написал кусок кода, где проверяю элемент, по которому кликаю, на наличие нужного мне класса. Исходя из этого присваиваю класс и показываю нужный список с категориями ремонта.
И еще, как сделать, чтобы при клике на вторую деталь с первой детали убирать класс active?
Дополнительно:
Содержание
Решил задачу таким кодом.
const tabs = document.getElementById('tabs');
const content = document.querySelectorAll('.priceHome__priceDetail');
const tabsEl = Array.from(document.querySelectorAll('.group-el'));
const changeClass = el => {
for (let i = 0; i < tabs.children.length; i++) {
tabs.children[i].classList.remove('active');
}
el.classList.add('active');
}
for (index = 0; index < tabsEl.length; index++) {
tabsEl[index].addEventListener('click', (e) => {
const currTab = e.target.dataset.btn;
changeClass(e.target);
for (let i = 0; i < content.length; i++) {
content[i].classList.remove('active');
if (content[i].dataset.content === currTab) {
content[i].classList.add('active');
}
}
})
}
Ответы:
Я хочу, чтобы при нажатии на деталь машины (например, капот) открылся блок с категориями повреждений и стоимостью за ремонт именно этой детали (именно капота)
Если я правильно понял, то просто цена должна отличатся, если да, то для каждой запчасти создаешь атрибут data-price(Например) и уже в нем указывашь цену для каждой запчасти, а в js просто будешь перед открытием окна считывать цену с данного атрибута и менять ее в нужных местах.
как сделать, чтобы при клике на вторую деталь с первой детали убирать класс active?
Есть два варианта:
1. Можно взять родительский элемент и уже в нем попытся найти элемент с классом active, если null, то ничего не делать, а иначе убрать его, после добавить active на котором был клик.
2. Можно перед добавлением active для нужного элемента сначала всем элемнтам удалить данный класс.
- Андрей Мартынкевич с удалением класса у меня получилось, спасибо.
А по первому вопросу еще не нашел решение. Логику такую хочу применить:
Дано: Есть div (.carsHome__basicCar), в котором есть 2 div (.car-hovers - в нём общий svg с path деталями машины (деталей 6 шт.) и .priceHome - в нём 6 разных div, внутри которых разные категории повреждений будут и цены). Блок с категориями и ценами я просто убираю display:none или показываю display:block ниже картинки с машиной. Как при клике на деталь выделить деталь цветом и показывать блок с категориями я разобрался, работает код. А вот как при клике на деталь показать ИМЕННО НУЖНЫЙ блок с категориями и ценой, который соответствует нажатой детали (как связать их) не могу понять.
Задача:При нажатии на деталь машины показать нужный блок с категориями и ценой
Подскажи, пожалуйста, как настроить связь детали машины и блока с категориями для нее. - leotoleo, Можно например каждую деталь обернуть в тег a(Задать атрибут href="category-1" например) и при клике на нее считывать href и открывать меню с id который мы получили из href. P.s Также нужно после клика Event.preventDefault().
Надеюсь помог. - Андрей Мартынкевич, не совсем разобрался, спасибо за подсказки. Решил вопрос вот таким кодом:
const tabs = document.getElementById('tabs');
const content = document.querySelectorAll('.priceHome__priceDetail');
const tabsEl = Array.from(document.querySelectorAll('.group-el'));const changeClass = el => {
for (let i = 0; i < tabs.children.length; i++) {
tabs.children[i].classList.remove('active');
}
el.classList.add('active');
}for (index = 0; index < tabsEl.length; index++) {
tabsEl[index].addEventListener('click', (e) => {
const currTab = e.target.dataset.btn;
changeClass(e.target);
for (let i = 0; i < content.length; i++) {
content[i].classList.remove('active');
if (content[i].dataset.content === currTab) {
content[i].classList.add('active');
}
}
})
}
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для того чтобы при нажатии на элемент path в SVG показать соответствующий ему div, можно использовать JavaScript. Ниже приведен пример кода, который демонстрирует как это можно сделать:
```html
.hidden {
display: none;
}
const paths = document.querySelectorAll('path');
const divs = document.querySelectorAll('div');
paths.forEach((path, index) => {
path.addEventListener('click', () => {
divs.forEach((div) => {
div.classList.add('hidden');
});
divs[index].classList.remove('hidden');
});
});
```
В этом примере мы создаем два элемента path в SVG и два элемента div. При клике на каждый из элементов path, мы скрываем все div и показываем только соответствующий div. Класс 'hidden' просто скрывает элемент, устанавливая его свойство display на none.
Надеюсь, это поможет вам решить вашу проблему! Если у вас есть дополнительные вопросы, не стесняйтесь задавать.