Доработать скрипт
Опыт в разработке мал скажем так только 1месяц с половиной. Нужна помощь опытных. Сейчас данный скрипт при клике на detailed показывает то что спрятано в more-opt. А когда кликаешь на соседний detailed он скрывает 1 more-opt что открыт и показывает more-opt соседла. Как сделать что бы данный скрит при клике на detailed тоже закрывал more-opt не нажимая на соседа.
let more = document.querySelectorAll('.more-opt'),
body = document.querySelector('body'),
des = document.querySelectorAll('.description'),
details = document.querySelectorAll('.detailed');
function hideMore(h){
for(let i = h; i < more.length; i++){
more[i].classList.remove('show');
des[i].classList.remove('hide');
more[i].classList.add('hide');
des[i].classList.add('show');
}
}
hideMore(0);
function showMore(s){
if (more[s].classList.contains('hide')) {
more[s].classList.remove('hide');
more[s].classList.add('show');
des[s].classList.add('hide');
}
}
body.addEventListener('click', e =>{
let target = e.target;
if (target && target.classList.contains('detailed')) {
for(let i = 0; i < details.length; i++){
if (target == details[i]) {
hideMore(0);
showMore(i);
}
}
}
)};
ЗЫ ну то есть на самого себя. |
Ваш скрипт через чур много действий производит.
Можете верстку показать? |
Цитата:
<div class="col-lg-3 col-md-4 col-12" style="justify-content: stretch; display: flex;"> <div class="row m-0"> <div class="col-md-12 col-5 p-0"> <img class="product-img" src="img/towar1.png" alt="Суши"> </div> <div class="col-md-12 col-7 p-0"> <!-- <div class="product-details"> --> <div class="d-flex justify-content-between"> <h2 class="product-title">Авокадо2</h2> <img class="detailed" src="img/q.svg" alt="Вопросик"> </div> <div class="description block-on-js show-t"> <p class="product-description">Классический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутом</p> </div> <div class="more-opt product-description"> <p>Калории: 180</p> <p>Состав: Рис, нори, авокадо.</p> </div> <div> <p class="pt-lg-3 product-price-block"> <span class=""> <span class="weight">1500 г.</span> <span class="price">1200 р.</span> </span> <span> <a href="#" class="badge badge-warning cart-btn">В корзину</a> </span> </p> </div> <!-- </div> --> </div> </div> </div> <div class="col-lg-3 col-md-4 col-12"> <div class="row m-0"> <div class="col-md-12 col-5 p-0"> <img class="product-img" src="img/towar1.png" alt="Суши"> </div> <div class="col-md-12 col-7 p-0"> <div class="product-details"> <div class="d-flex justify-content-between"> <h2 class="product-title">Авокадо</h2> <img class="detailed" src="img/q.svg" alt="Вопросик"> </div> <div class=""> <div class="description block-on-js"> <p class="product-description">Классический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутомКлассический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутом</p> </div> <div class="more-opt product-description"> <p>Калории: 180</p> <p>Состав: Рис, нори, авокадо.</p> </div> <p class="pt-3 product-price-block"> <span class=""> <span class="weight">1500 г.</span> <span class="price">1200р.</span> </span> <span> <a href="#" class="badge badge-warning cart-btn">В корзину</a> </span> </p> </div> </div> </div> </div> </div> |
windcrack,
400 вариантов того что вам нужно форум поиск открывашка |
<div class="col-lg-3 col-md-4 col-12" style="justify-content: stretch; display: flex;">
<div class="row m-0">
<div class="col-md-12 col-5 p-0">
<img class="product-img" src="img/towar1.png" alt="Суши">
</div>
<div class="col-md-12 col-7 p-0">
<div class="product-details">
<div class="d-flex justify-content-between">
<h2 class="product-title">Авокадо2</h2>
<img class="detailed" src="img/q.svg" alt="Вопросик">
</div>
<div class="description block-on-js show-t">
<p class="product-description">Классический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутом</p>
</div>
<div class="more-opt product-description">
<p>Калории: 180</p>
<p>Состав: Рис, нори, авокадо.</p>
</div>
<div>
<p class="pt-lg-3 product-price-block">
<span class="">
<span class="weight">1500 г.</span>
<span class="price">1200 р.</span>
</span>
<span>
<a href="#" class="badge badge-warning cart-btn">В корзину</a>
</span>
</p>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-4 col-12">
<div class="row m-0">
<div class="col-md-12 col-5 p-0">
<img class="product-img" src="img/towar1.png" alt="Суши">
</div>
<div class="col-md-12 col-7 p-0">
<div class="product-details">
<div class="d-flex justify-content-between">
<h2 class="product-title">Авокадо</h2>
<img class="detailed" src="img/q.svg" alt="Вопросик">
</div>
<div class="">
<div class="description block-on-js">
<p class="product-description">Классический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутомКлассический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутом</p>
</div>
<div class="more-opt product-description">
<p>Калории: 180</p>
<p>Состав: Рис, нори, авокадо.</p>
</div>
<p class="pt-3 product-price-block">
<span class="">
<span class="weight">1500 г.</span>
<span class="price">1200р.</span>
</span>
<span>
<a href="#" class="badge badge-warning cart-btn">В корзину</a>
</span>
</p>
</div>
</div>
</div>
</div>
</div>
<style>.more-opt{display:none}</style>
<script>
const items = document.querySelectorAll('.product-details');
let activeElement;
const toggle = function(showOptions) {
this.querySelectorAll('.more-opt,.description').forEach(function(node) {
node.style.display = showOptions !== node.classList.contains('description') ? 'block' : 'none';
});
};
items.forEach(function(item) {
item.querySelector('.detailed').addEventListener('click', function() {
const isActive = activeElement === item;
if (!isActive && activeElement)
toggle.call(activeElement, false);
activeElement = isActive ? undefined : item;
toggle.call(item, !isActive);
});
});
</script>
|
открывашка зависимая js делегрование
windcrack,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.more-opt{
display: none;
}
.more-opt.show{
display: block;
}
.description.hide{
display: none;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
var more = document.querySelectorAll(".more-opt"),
body = document.querySelector("body"),
des = document.querySelectorAll(".description"),
details = document.querySelectorAll(".detailed"),
index = 0;
more[index].classList.add("show");
des[index].classList.add("hide");
body.addEventListener("click", function(e) {
var target = e.target;
if (target && target.classList.contains("detailed")) {
var i = [].indexOf.call(details, target);
if (i == index) {
more[index].classList.toggle("show");
des[index].classList.toggle("hide");
}
else {
more[index].classList.remove("show");
des[index].classList.remove("hide");
index = i;
more[index].classList.add("show");
des[index].classList.add("hide");
}
}
})
});
</script>
</head>
<body>
<div class="col-lg-3 col-md-4 col-12" style="justify-content: stretch; display: flex;">
<div class="row m-0">
<div class="col-md-12 col-5 p-0">
<img class="product-img" src="img/towar1.png" alt="Суши">
</div>
<div class="col-md-12 col-7 p-0">
<!-- <div class="product-details"> -->
<div class="d-flex justify-content-between">
<h2 class="product-title">Авокадо2</h2>
<img class="detailed" src="img/q.svg" alt="Вопросик">
</div>
<div class="description block-on-js show-t">
<p class="product-description">Классический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутом</p>
</div>
<div class="more-opt product-description">
<p>Калории: 180</p>
<p>Состав: Рис, нори, авокадо.</p>
</div>
<div>
<p class="pt-lg-3 product-price-block">
<span class="">
<span class="weight">1500 г.</span>
<span class="price">1200 р.</span>
</span>
<span>
<a href="#" class="badge badge-warning cart-btn">В корзину</a>
</span>
</p>
</div>
<!-- </div> -->
</div>
</div>
</div>
<div class="col-lg-3 col-md-4 col-12">
<div class="row m-0">
<div class="col-md-12 col-5 p-0">
<img class="product-img" src="img/towar1.png" alt="Суши">
</div>
<div class="col-md-12 col-7 p-0">
<div class="product-details">
<div class="d-flex justify-content-between">
<h2 class="product-title">Авокадо</h2>
<img class="detailed" src="img/q.svg" alt="Вопросик">
</div>
<div class="">
<div class="description block-on-js">
<p class="product-description">Классический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутомКлассический японский ролл со свежим авокадо и кунжутом Классический японский ролл со свежим авокадо и кунжутом</p>
</div>
<div class="more-opt product-description">
<p>Калории: 180</p>
<p>Состав: Рис, нори, авокадо.</p>
</div>
<p class="pt-3 product-price-block">
<span class="">
<span class="weight">1500 г.</span>
<span class="price">1200р.</span>
</span>
<span>
<a href="#" class="badge badge-warning cart-btn">В корзину</a>
</span>
</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 16:40. |