<style>
.tooltip-box {
opacity: 0;
pointer-events: none;
transition: opacity 0.35s ease;
}
.tooltip-box.is-active {
opacity: 1;
pointer-events: auto;
}
</style>
<script>
(function () {
const isDesktop = window.innerWidth >= 960;
const btns = document.querySelectorAll('.tooltip-btn');
const boxes = document.querySelectorAll('.tooltip-box');
function closeAll() {
boxes.forEach(b => b.classList.remove('is-active'));
btns.forEach(b => b.classList.remove('is-active'));
}
function openTooltip(id) {
closeAll();
document
.querySelectorAll('.tooltip-box[data-tooltip="' + id + '"]')
.forEach(el => el.classList.add('is-active'));
document
.querySelectorAll('.tooltip-btn[data-tooltip="' + id + '"]')
.forEach(el => el.classList.add('is-active'));
}
/* ===== DESKTOP — hover ===== */
if (isDesktop) {
btns.forEach(btn => {
const id = btn.dataset.tooltip;
btn.addEventListener('mouseenter', () => openTooltip(id));
btn.addEventListener('mouseleave', closeAll);
});
}
/* ===== MOBILE — click + первый открыт ===== */
if (!isDesktop) {
// открываем первый тултип
openTooltip('1');
btns.forEach(btn => {
const id = btn.dataset.tooltip;
btn.addEventListener('click', (e) => {
e.preventDefault();
const boxesForId = document.querySelectorAll(
'.tooltip-box[data-tooltip="' + id + '"]'
);
const isOpen = [...boxesForId].some(b =>
b.classList.contains('is-active')
);
if (isOpen) {
closeAll();
} else {
openTooltip(id);
}
});
});
}
})();
</script>