This commit is contained in:
zhx 2026-05-26 02:59:27 +08:00
parent e0261a117a
commit a69c9a5445
4 changed files with 25 additions and 16 deletions

View File

@ -112,7 +112,7 @@
function initLanguageMenu() {
document.addEventListener('click', function (event) {
var toggle = event.target.closest('[data-language-toggle]');
var toggle = closest(event.target, '[data-language-toggle]');
var menu = document.querySelector('[data-language-menu]');
if (toggle && menu) {
var expanded = toggle.getAttribute('aria-expanded') === 'true';
@ -123,7 +123,7 @@
menu.hidden = expanded;
return;
}
var option = event.target.closest('[data-lang-option]');
var option = closest(event.target, '[data-lang-option]');
if (option) {
if (menu) menu.hidden = true;
var button = document.querySelector('[data-language-toggle]');
@ -131,7 +131,7 @@
load(option.getAttribute('data-lang-option'));
return;
}
if (menu && !event.target.closest('.language-switcher')) {
if (menu && !closest(event.target, '.language-switcher')) {
menu.hidden = true;
var languageButton = document.querySelector(
'[data-language-toggle]'
@ -142,6 +142,14 @@
});
}
function closest(node, selector) {
while (node && node !== document) {
if (node.matches && node.matches(selector)) return node;
node = node.parentNode;
}
return null;
}
window.HyAppI18n = {
load: load,
apply: apply,

View File

@ -289,14 +289,14 @@ a {
}
.language-menu {
position: absolute;
z-index: 4;
top: calc(100% + 7px);
right: 0;
display: grid;
gap: 2px;
min-width: 58px;
padding: 5px;
position: absolute;
z-index: 20;
top: calc(100% + 7px);
right: 0;
display: grid;
gap: 2px;
min-width: 72px;
padding: 5px;
border: 1px solid rgba(35, 40, 46, 0.1);
border-radius: 8px;
background: rgba(255, 255, 255, 0.96);
@ -304,11 +304,12 @@ a {
}
.language-menu button {
min-height: 28px;
border-radius: 6px;
color: var(--hy-theme-text, #282333);
font-size: 12px;
font-weight: 900;
min-height: 34px;
border-radius: 6px;
color: var(--hy-theme-text, #282333);
font-size: 12px;
font-weight: 900;
touch-action: manipulation;
}
.language-menu button.is-active {