From 15725ae90aa75c250e7f8348c4131d06348e9336 Mon Sep 17 00:00:00 2001 From: Falknat Date: Sat, 17 Jan 2026 14:21:09 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=84?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D1=82=D0=B0=20PWA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правки для фронта в PWA режиме. --- front_vue/src/App.vue | 43 +++++++++++++++++++ front_vue/src/components/ui/MoveCardPanel.vue | 4 ++ front_vue/src/views/ArchivePage.vue | 5 ++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/front_vue/src/App.vue b/front_vue/src/App.vue index e6114ed..0d6f976 100644 --- a/front_vue/src/App.vue +++ b/front_vue/src/App.vue @@ -132,4 +132,47 @@ body.panel-open { /* Используем overscroll-behavior вместо touch-action: none для PWA совместимости */ overscroll-behavior: none !important; } + +/* ========== PWA режим: исправление "залипания" свайпа ========== */ +/* iOS PWA не понимает когда заканчивается вертикальный жест */ +/* Эти правила помогают браузеру корректно определять направление скролла */ +@media (display-mode: standalone), (display-mode: fullscreen) { + html, body { + /* Отключаем overscroll bounce на уровне документа */ + overscroll-behavior: none; + /* Отключаем выделение текста на всём документе при касании */ + -webkit-user-select: none; + user-select: none; + -webkit-touch-callout: none; + } + + /* Горизонтальные скролл-контейнеры */ + .columns, + .mobile-cards { + /* Изолируем overscroll внутри контейнера */ + overscroll-behavior: contain; + } + + /* Вертикальные скролл-контейнеры */ + .cards, + .archive-list { + overscroll-behavior: contain; + } + + /* Скрываем скроллбар на мобильных */ + .cards, + .archive-list, + .columns, + .mobile-cards { + scrollbar-width: none; + -ms-overflow-style: none; + } + + .cards::-webkit-scrollbar, + .archive-list::-webkit-scrollbar, + .columns::-webkit-scrollbar, + .mobile-cards::-webkit-scrollbar { + display: none; + } +} diff --git a/front_vue/src/components/ui/MoveCardPanel.vue b/front_vue/src/components/ui/MoveCardPanel.vue index e3bc6f8..b81d111 100644 --- a/front_vue/src/components/ui/MoveCardPanel.vue +++ b/front_vue/src/components/ui/MoveCardPanel.vue @@ -130,6 +130,10 @@ onUpdated(refreshIcons) display: flex; flex-direction: column; overflow: hidden; + /* Предотвращаем выделение/копирование текста при long-press */ + -webkit-user-select: none; + user-select: none; + -webkit-touch-callout: none; } .panel-header { diff --git a/front_vue/src/views/ArchivePage.vue b/front_vue/src/views/ArchivePage.vue index d0c2cbb..f330cf4 100644 --- a/front_vue/src/views/ArchivePage.vue +++ b/front_vue/src/views/ArchivePage.vue @@ -350,8 +350,9 @@ onMounted(async () => { /* ========== MOBILE: Архив ========== */ .archive-list.mobile { - /* 60px header + 40px title + 64px nav + safe-area */ - max-height: calc(100dvh - 60px - 40px - 64px - var(--safe-area-bottom, 0px)); + /* Как в Column.vue - большой запас для всех элементов */ + /* safe-area-top + header + title + nav + safe-area-bottom + запас */ + max-height: calc(100dvh - var(--safe-area-top, 0px) - 60px - 50px - 64px - var(--safe-area-bottom, 0px) - 20px); max-width: none; gap: 12px; overflow-y: auto;