diff --git a/resources/js/chat-room.js b/resources/js/chat-room.js index bf4c789..b27ae98 100644 --- a/resources/js/chat-room.js +++ b/resources/js/chat-room.js @@ -4,6 +4,7 @@ export { escapeHtml, escapeHtmlWithLineBreaks } from "./chat-room/html.js"; export { applyFontSize, bindChatFontSizeControl, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize } from "./chat-room/font-size.js"; export { bindChatImageUploadControl } from "./chat-room/image-upload.js"; export { closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox } from "./chat-room/lightbox.js"; +export { bindMobileDrawerControls } from "./chat-room/mobile-drawer.js"; export { BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, @@ -32,6 +33,7 @@ import { escapeHtml, escapeHtmlWithLineBreaks } from "./chat-room/html.js"; import { applyFontSize, bindChatFontSizeControl, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize } from "./chat-room/font-size.js"; import { bindChatImageUploadControl } from "./chat-room/image-upload.js"; import { closeChatImageLightbox, initChatImageLightboxEvents, openChatImageLightbox } from "./chat-room/lightbox.js"; +import { bindMobileDrawerControls } from "./chat-room/mobile-drawer.js"; import { BLOCKABLE_SYSTEM_SENDERS, BLOCKED_SYSTEM_SENDERS_STORAGE_KEY, @@ -63,6 +65,7 @@ if (typeof window !== "undefined") { applyFontSize, bindChatFontSizeControl, bindChatImageUploadControl, + bindMobileDrawerControls, CHAT_FONT_SIZE_STORAGE_KEY, restoreChatFontSize, closeChatImageLightbox, @@ -95,4 +98,5 @@ if (typeof window !== "undefined") { bindChatFontSizeControl(); bindChatImageUploadControl(); bindChatRightPanelControls(); + bindMobileDrawerControls(); } diff --git a/resources/js/chat-room/mobile-drawer.js b/resources/js/chat-room/mobile-drawer.js new file mode 100644 index 0000000..d13fa7c --- /dev/null +++ b/resources/js/chat-room/mobile-drawer.js @@ -0,0 +1,56 @@ +// 手机端抽屉基础控件事件绑定,替代浮动按钮、关闭按钮与名单 tab 的内联事件。 + +let mobileDrawerEventsBound = false; + +/** + * 绑定手机端抽屉基础控件事件。 + * + * @returns {void} + */ +export function bindMobileDrawerControls() { + if (mobileDrawerEventsBound || typeof document === "undefined") { + return; + } + + mobileDrawerEventsBound = true; + document.addEventListener("click", (event) => { + if (!(event.target instanceof Element)) { + return; + } + + const drawerTrigger = event.target.closest("[data-mobile-drawer-open]"); + if (drawerTrigger) { + event.preventDefault(); + window.openMobileDrawer?.(drawerTrigger.dataset.mobileDrawerOpen); + return; + } + + if (event.target.closest("[data-mobile-drawer-close]")) { + event.preventDefault(); + window.closeMobileDrawer?.(); + return; + } + + const tabTrigger = event.target.closest("[data-mobile-drawer-tab]"); + if (tabTrigger) { + event.preventDefault(); + window.switchMobileTab?.(tabTrigger.dataset.mobileDrawerTab); + } + }); + + document.addEventListener("change", (event) => { + if (!(event.target instanceof HTMLSelectElement) || event.target.id !== "mob-user-sort-select") { + return; + } + + window.renderMobileUserList?.(); + }); + + document.addEventListener("input", (event) => { + if (!(event.target instanceof HTMLInputElement) || event.target.id !== "mob-user-search-input") { + return; + } + + window.scheduleRenderMobileUserList?.(); + }); +} diff --git a/resources/views/chat/partials/layout/mobile-drawer.blade.php b/resources/views/chat/partials/layout/mobile-drawer.blade.php index 953c0f7..f900140 100644 --- a/resources/views/chat/partials/layout/mobile-drawer.blade.php +++ b/resources/views/chat/partials/layout/mobile-drawer.blade.php @@ -17,18 +17,18 @@ {{-- ── 浮动按钮组(右下角固定) ── --}}
- - + +
{{-- ── 遮罩(点击关闭当前抽屉) ── --}} -
+
{{-- ── 工具条抽屉(底部滑入) ── --}}
🔧 工具菜单 - +

签到
@@ -57,17 +57,17 @@
👥 在线名单 - +
{{-- Tab 切换条 --}}
+ data-mobile-drawer-tab="users">👥 名单 + data-mobile-drawer-tab="rooms">🏠 房间
{{-- 名单面板 --}} @@ -75,15 +75,13 @@ {{-- 排序/搜索工具栏 --}}
+ style="flex:2;font-size:11px;border:1px solid #b0c8e0;border-radius:3px;padding:2px 6px;color:#333;">
{{-- 用户列表容器 --}}