VKUI icon indicating copy to clipboard operation
VKUI copied to clipboard

[Feature]: Скролл в Panel

Open eolme opened this issue 5 years ago • 16 comments

Сейчас скролл распространяется на всю страницу, связи с чем библиотека обросла костылями для анимаций и восстановления позиции прокуртки. К тому же, сам скроллбар наезжает на PanelHeader, что выглядит не нативно.

Предлагаю сам скролл сделать внутри Panel, для него же сделать условно 2 слота (пропа) - before/after - в который будет помещаться, например, PanelHeader.

FixedLayout в данном случае уйдет за ненадобностью, проблемы со скачущими элементами уйдут, сохранение позиции скролла упростится, и скроллбар будет а-ля нативный.

Единственная, пожалуй, проблема останется с оверскроллом на Safari, но она довольно просто решается - у body position: fixed. Возможно затронет insets, но там уже по реализации смотреть надо.

eolme avatar Oct 09 '20 05:10 eolme

Если у body будет position: fixed, вангую что будет куча проблем в iOS, пруфов у меня нет, но в модалках (которые тоже fixed) были проблемы с инпутами причем в разных версиях iOS работало по разному.

stels-cs avatar Jan 20 '21 11:01 stels-cs

@stels-cs, тестил на бете старой v4, все ок

eolme avatar Jan 20 '21 17:01 eolme

Есть в планах подобная реализация? Или так и будем страдать с fixedlayout и его костылями?

eolme avatar Aug 20 '21 20:08 eolme

@eolme мы собираемся разобраться с FixedLayout, чтобы преуменьшить страдания, так что все будет. Точный срок пока не могу назвать, но планируем это сделать до конца этого года.

eugpoloz avatar Aug 20 '21 21:08 eugpoloz

@eugpoloz зачем уменьшить, если можно вообще избавится? Звучит как-то плохо. Серьезно, нет ни одной причины почему и зачем нужен fixedlayout.

eolme avatar Aug 20 '21 22:08 eolme

@eolme подожди, я нигде не сказала, что мы его оставим. В планах — «разобраться», пока предварительно обсуждали, что его выпилим как раз, потому что причин его оставлять действительно нет.

eugpoloz avatar Aug 21 '21 07:08 eugpoloz

@eugpoloz а что скажешь про скролл внутри панели? У нас вроде есть уже логика обработки, нужно только в самой панели реализовать

eolme avatar Aug 21 '21 11:08 eolme

@eolme скролл не на документе — путь к пачке проблем, по ходу решения которых мы обрастём большим количеством костылей (и даже они вряд ли помогут). Пример таких проблем:

  1. Упомянутый тобой оверскролл на iOS. Исправить его с помощью предложенного position: fixed у меня не получилось. Возможно не так тебя понял. Буду рад посмотреть на живой пример с решением этой проблемы.
  2. Залипающий скролл. Это уже более серьезная проблема. Тоже пока не видел удачного решения. Браузер всё время норовит проскроллить документ, а не внутренний элемент.
  3. Scroll restoration. При переходе на другой документ и возврате с него скролл не восстановится автоматически, если он будет не на document.
  4. Усложнение API. Теперь людям для скролла к элементу нужно будет обращаться не к document (интуитивно), а ко вложенной dom-ноде (без доки не догадаются)

ArthurStam avatar Aug 23 '21 14:08 ArthurStam

Мы постараемся решить все основные проблемы, связанные с навигацией в следующем квартале (до нг)

ArthurStam avatar Aug 23 '21 14:08 ArthurStam

@ArthurStam по 3 и 4 пункту, у нас контекст для этого есть, это наоборот унификация API. Восстановление у нас все равно кастомное.

eolme avatar Aug 23 '21 17:08 eolme

По поводу сколла у меня есть пример с реализацией, но там не совсем то, сделано костыльно достаточно https://vk.com/masks

eolme avatar Aug 23 '21 17:08 eolme

Мне бы реализацию посмотреть, а не её результат. Про этот контекст знают полтора человека. Восстановление у нас кастомное, а при возвращении с левого сайта на vkui — нативное. И его оторвет.

ArthurStam avatar Aug 25 '21 10:08 ArthurStam

Мне бы реализацию посмотреть

mvk + devtools вроде никто не запрещал

eolme avatar Aug 25 '21 17:08 eolme

Как-то сложно диалог строится. Мне предложение скролла в панели не нравится, причины я описал. Если есть решение, то пришли либо PR, либо ссылку на код. Заниматься дебагом и реверс инжинирингом подхода, который на этапе рассуждений вызывает сомнения, у меня времени нет.

ArthurStam avatar Aug 25 '21 18:08 ArthurStam

Такс, мой выход. Если изначальная проблема в костыльности FixedLayout, то в #1949 + #1958 я выкинул всё костыляние для переходов и вроде бы ничего не произошло.

У скролла внутри Panel, кроме упомянутых @ArthurStam проблем, есть фатальный недостаток — в многоколоночном интерфейсе придется целенаправленно скроллить внутри колонки (бонусом — страшный внутренний скроллбар на винде). Еще хуже будет, когда мы начнем делать на вкюи разделы большого вк, где все завязано на глобальный скролл.

FixedLayout, кроме хака с переходом, нужен потому и затем, что:

  1. Цепляется к колонке в многоколоночном интерфейсе
  2. Проставляет инсеты
  3. Проставляет з-индексы

Возможно, сейчас он делает это не очень хорошо, но это отдельные баги, велкам заносить — я начал #1970. Даже если заведешь [Feature] FixedLayout в портале я буду только рад.

Комбинировать восстановление скролла и анимации довольно сложно в любом случае (вот правда, не нашел ни одного удачного примера, дайте знать если видели). Контекст: сейчас мы на время анимации обрезаем панели по размеру экрана и скролл на документе исчезает. Я делал пару концептов, где глобальный скролл сохраняется на время перехода, и мне не нравится, что так во время перехода можно скроллить — думаю, на убивание этого поведения уйдет много костылей. Пришел к выводу, что сильно лучше, чем сейчас, не выйдет.

Каждый, кто хочет скролл внутри панели, может легко сделать это в 1 строку: <Panel style={{ overflow: 'auto' }}>

Поэтому @eolme предлагаю этот ишью закрыть — спасибо за предложение, правда, я очень ценю твое участие.

thoughtspile avatar Oct 12 '21 18:10 thoughtspile

@thoughtspile, у меня изначально претензия к скроллбару, который уходит под любой FixedLayout.

У дизайнеров сразу срабатывает триггер и просят вообще его скрывать. Со стороны пользователя любой из вариантов выглядит не нативно и не интуитивно.

eolme avatar Oct 12 '21 20:10 eolme