morphos / js /tooltip.js
Jose Salazar
Deploy Morphos en HF Spaces
445de93
Raw
History Blame Contribute Delete
1.54 kB
const burbuja = document.createElement('div');
burbuja.id = 'tooltip-global';
document.body.appendChild(burbuja);
const MARGEN = 8;
const posicionar = (el) => {
const rect = el.getBoundingClientRect();
const enFooter = el.closest('.nav-inferior') !== null;
burbuja.style.left = '';
burbuja.style.right = '';
let top, left;
if (enFooter) {
top = rect.top - burbuja.offsetHeight - MARGEN;
} else {
top = rect.bottom + MARGEN;
}
left = rect.left + rect.width / 2 - burbuja.offsetWidth / 2;
const margenLateral = 6;
if (left < margenLateral) left = margenLateral;
if (left + burbuja.offsetWidth > window.innerWidth - margenLateral) {
left = window.innerWidth - burbuja.offsetWidth - margenLateral;
}
burbuja.style.top = `${top + window.scrollY}px`;
burbuja.style.left = `${left}px`;
};
let temporizador;
document.addEventListener('mouseover', (e) => {
const el = e.target.closest('[data-tooltip]');
if (!el) return;
clearTimeout(temporizador);
temporizador = setTimeout(() => {
burbuja.textContent = el.dataset.tooltip;
burbuja.classList.add('visible');
posicionar(el);
}, 400);
});
document.addEventListener('mouseout', (e) => {
const el = e.target.closest('[data-tooltip]');
if (!el) return;
clearTimeout(temporizador);
burbuja.classList.remove('visible');
});
document.addEventListener('click', () => {
clearTimeout(temporizador);
burbuja.classList.remove('visible');
});