fix: Tooltip bleibt nicht mehr nach Navigation stecken, kein nativer Tooltip bei Child-Hover
This commit is contained in:
1 parent
22d2df01d0
commit
52aecc967f
2 files changed
+29
-4
No files matched your search
@@ -10,6 +10,9 @@ function registerPage(name, { init, destroy }) {
|
|||||||
async function navigateTo(page, params = {}) {
|
async function navigateTo(page, params = {}) {
|
||||||
const app = document.getElementById('app');
|
const app = document.getElementById('app');
|
||||||
|
|
||||||
|
// Tooltip verstecken
|
||||||
|
if (window.hideTooltip) window.hideTooltip();
|
||||||
|
|
||||||
// Alte Page zerstören
|
// Alte Page zerstören
|
||||||
if (currentPage && routes[currentPage] && routes[currentPage].destroy) {
|
if (currentPage && routes[currentPage] && routes[currentPage].destroy) {
|
||||||
routes[currentPage].destroy();
|
routes[currentPage].destroy();
|
||||||
|
|||||||
+26
-4
@@ -90,6 +90,12 @@
|
|||||||
const target = findTitleTarget(e.target);
|
const target = findTitleTarget(e.target);
|
||||||
if (!target) return;
|
if (!target) return;
|
||||||
|
|
||||||
|
// Gleicher Target → nichts tun (Child-Wechsel innerhalb des gleichen Elements)
|
||||||
|
if (target === currentTarget) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// title → data-tooltip verschieben (native tooltip unterdrücken)
|
// title → data-tooltip verschieben (native tooltip unterdrücken)
|
||||||
const title = target.getAttribute('title');
|
const title = target.getAttribute('title');
|
||||||
if (title) {
|
if (title) {
|
||||||
@@ -101,8 +107,13 @@
|
|||||||
if (!text) return;
|
if (!text) return;
|
||||||
|
|
||||||
// Falls bereits ein anderer tooltip offen → sofort wechseln
|
// Falls bereits ein anderer tooltip offen → sofort wechseln
|
||||||
if (currentTarget && currentTarget !== target) {
|
if (currentTarget) {
|
||||||
hide();
|
hide();
|
||||||
|
// title des neuen Targets nochmal verschieben (hide hat es nicht zurückgesetzt)
|
||||||
|
if (target.getAttribute('title')) {
|
||||||
|
target.setAttribute('data-tooltip', target.getAttribute('title'));
|
||||||
|
target.removeAttribute('title');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
@@ -112,12 +123,23 @@
|
|||||||
document.addEventListener('mouseleave', function (e) {
|
document.addEventListener('mouseleave', function (e) {
|
||||||
const target = findTitleTarget(e.target);
|
const target = findTitleTarget(e.target);
|
||||||
if (!target) return;
|
if (!target) return;
|
||||||
if (target === currentTarget || timeout) {
|
if (target !== currentTarget && !timeout) return;
|
||||||
hide();
|
|
||||||
}
|
// Prüfe ob die Maus zu einem Kind-Element des gleichen Tooltip-Targets geht
|
||||||
|
var related = e.relatedTarget;
|
||||||
|
if (related && target.contains(related)) return;
|
||||||
|
|
||||||
|
hide();
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
// Auch bei Scroll/Resize verstecken
|
// Auch bei Scroll/Resize verstecken
|
||||||
document.addEventListener('scroll', hide, true);
|
document.addEventListener('scroll', hide, true);
|
||||||
window.addEventListener('resize', hide);
|
window.addEventListener('resize', hide);
|
||||||
|
|
||||||
|
// Bei SPA-Navigation verstecken
|
||||||
|
window.addEventListener('popstate', hide);
|
||||||
|
window.addEventListener('hashchange', hide);
|
||||||
|
|
||||||
|
// Global verfügbar für SPA-Router
|
||||||
|
window.hideTooltip = hide;
|
||||||
})();
|
})();
|
||||||
Reference in new issue
Block a user