feat(room): полноэкранный режим на мобильном с выезжающим тулбаром
Вход — кнопка «Экран» в тулбаре, теперь видна и на мобильном (по аналогии с десктопом, а не спрятана в шторку настроек). В полноэкранном режиме топбар и тулбар выходят из потока и лежат оверлеем поверх сцены: тап/клик по сцене вне элементов управления показывает их, сами прячутся через несколько секунд бездействия; на десктопе дополнительно — наведение мыши в нижнюю полосу экрана. Работает одинаково на мобильном и десктопе. Кнопка настроек устройств в тулбаре на мобильном подписана «Настройки» вместо «Устройства». Раскладка кнопок мобильного тулбара, когда они не помещаются в один ряд (7+, обычный случай с «Экраном» и «Очередью» у организатора), стала равномерной сеткой на 4 колонки вместо переноса «как получится» через flex-wrap.
This commit is contained in:
@@ -1088,22 +1088,79 @@ video[data-lk-source='screen_share'] { object-fit: contain; background: #000; }
|
||||
в самой конференции, а вот чип «№ … / Пригласить» с телефона нужен чаще
|
||||
(скопировать ссылку и позвать участника), поэтому он остаётся.
|
||||
|
||||
Тулбар: демонстрация экрана, полноэкранный режим и мини-окно с телефона
|
||||
практически не нужны, а все 8 кнопок в ширину экрана физически не
|
||||
помещаются — скрываем их и уплотняем оставшиеся пять
|
||||
(микрофон/камера/устройства/чат/выход). `flex-wrap` + `min-width: 0` —
|
||||
страховка на совсем узких экранах, чтобы футер ни при каких подписях не
|
||||
вылезал за ширину окна. */
|
||||
Тулбар: демонстрация экрана и мини-окно с телефона практически не нужны —
|
||||
скрыты. Полноэкранный режим ОСТАЁТСЯ виден, как на десктопе (решение
|
||||
оператора 03.08: вход в него — по аналогии с десктопным приложением, не
|
||||
спрятан в шторку настроек) — вместе с «Рукой» (0.0.16) и опциональными
|
||||
«Очередью» (только организатору)/«Чатом» на мобильном может набраться до
|
||||
7–8 кнопок разом, в один ряд по 360px они уже не помещаются.
|
||||
`.room-toolbar.tb-wrap-grid` — класс считает JS (`RoomToolbar.tsx`, по
|
||||
фактическому числу видимых на мобильном кнопок, а не селекторами
|
||||
`:nth-child` — организатору достаётся ДОПОЛНИТЕЛЬНАЯ обёртка
|
||||
`.tb-menu-wrap` вокруг кнопки «Очередь», из-за неё позиция по DOM «плывёт»)
|
||||
— переключает раскладку на равномерную сетку 4 колонки: 7 кнопок ложатся
|
||||
4+3, 8 — 4+4, а не как получится через `flex-wrap` (например 6+1, если
|
||||
просто позволить браузеру перенести лишние). До 6 кнопок раскладка —
|
||||
обычный flex, они влезают в 360px одним рядом без переноса вовсе. */
|
||||
@media (max-width: 600px) {
|
||||
.room-topbar { padding: var(--space-3) var(--space-4); justify-content: flex-end; }
|
||||
.room-title-block { display: none; }
|
||||
|
||||
.tb-btn--screenshare,
|
||||
.tb-btn--fullscreen,
|
||||
.tb-btn--pip { display: none; }
|
||||
|
||||
.room-toolbar { padding: var(--space-3) var(--space-2); gap: 2px; flex-wrap: wrap; }
|
||||
.room-toolbar.tb-wrap-grid { display: grid; grid-template-columns: repeat(4, 1fr); justify-items: center; }
|
||||
.tb-btn { min-width: 0; padding: 6px 6px; }
|
||||
.tb-btn .icon-shell { width: 40px; height: 40px; }
|
||||
.tb-btn span.label { font-size: 11px; }
|
||||
}
|
||||
|
||||
/*
|
||||
* ---------- Полноэкранный режим: топбар и тулбар прячутся в оверлей ----------
|
||||
* Работает на ЛЮБОЙ ширине экрана (не только мобильной) — как только
|
||||
* `document.fullscreenElement`, корневой контейнер комнаты получает класс
|
||||
* `.room-fullscreen-overlay` (`RoomPage.tsx`, вместе с `useFullscreen`).
|
||||
* Топбар и тулбар выходят из flow-потока `.room-shell` — единственный
|
||||
* оставшийся в потоке `.room-main` (`flex: 1`) сам растягивается на всю
|
||||
* высоту, отдельного правила не нужно — и ложатся оверлеем поверх сцены
|
||||
* сверху/снизу. Появляются по клику/тапу вне элементов управления
|
||||
* (`RoomPage.tsx`, `handleStageAreaClick`) или — на десктопе — при наведении
|
||||
* мыши в нижнюю полосу экрана (`FULLSCREEN_FOOTER_HOVER_ZONE_PX`), прячутся
|
||||
* по повторному клику или сами через `FULLSCREEN_CONTROLS_AUTO_HIDE_MS`
|
||||
* бездействия.
|
||||
*
|
||||
* z-index 150 — выше сцены, но НИЖЕ модалки/шторки настроек (200): если из
|
||||
* уже открытого оверлея снова открыть «Настройки», диалог должен лечь
|
||||
* поверх тулбара, а не под него.
|
||||
*
|
||||
* Кнопка «Экран» (выход) на мобильном видна и без полноэкранного режима
|
||||
* (см. блок выше — по аналогии с десктопом), поэтому здесь её отдельно
|
||||
* возвращать не нужно.
|
||||
*/
|
||||
.room-fullscreen-overlay .room-topbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 150;
|
||||
background: rgba(20, 22, 26, 0.92);
|
||||
backdrop-filter: blur(8px);
|
||||
transform: translateY(-100%);
|
||||
transition: transform 200ms ease-out;
|
||||
}
|
||||
.room-fullscreen-overlay .room-topbar.is-visible { transform: translateY(0); }
|
||||
|
||||
.room-fullscreen-overlay .room-toolbar {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 150;
|
||||
background: rgba(20, 22, 26, 0.92);
|
||||
backdrop-filter: blur(8px);
|
||||
padding-bottom: calc(var(--space-3) + env(safe-area-inset-bottom));
|
||||
transform: translateY(100%);
|
||||
transition: transform 200ms ease-out;
|
||||
}
|
||||
.room-fullscreen-overlay .room-toolbar.is-visible { transform: translateY(0); }
|
||||
|
||||
Reference in New Issue
Block a user