-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: sticky foldable header #440
Conversation
4472220
to
9f0a44a
Compare
Что сделано
Небольшой отчет: https://nda.ya.ru/t/sRWUxSV65fkcHw |
9f0a44a
to
15beb56
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давай все же попробуем сделать автоскрытие при скролле. Оно не должно сильно грузить систему. Для примера - https://www.npmjs.com/package/@codesyntax/ionic-react-header-collapse (можно поискать и готовые решения получше, я на поиск потратил всего пару минут)
ed6e2ca
to
6505806
Compare
1af4432
to
8056614
Compare
@@ -1,4 +1,5 @@ | |||
.header { | |||
padding-top: 15px; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавил паддинг на хедер, убрал отступ сверху с .report
По местоположению ничего не изменилось, но так при скролле не будет отступа перед хедером в 15px
@@ -22,7 +22,6 @@ | |||
.report { | |||
font: 15px YS Text, Helvetica Neue, Arial, sans-serif; | |||
line-height: 20px; | |||
margin-top: 15px; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавил паддинг на хедер, убрал отступ сверху с .report
По местоположению ничего не изменилось, но так при скролле не будет отступа перед хедером в 15px
@@ -285,7 +284,8 @@ main.container { | |||
.tests-group__title:before, | |||
.state-title:after, | |||
.details__summary:after, | |||
.error .details__summary:before { | |||
.error .details__summary:before, | |||
.sticky-header__wrap:before { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это стрелка сворачивания
const StickyHeader = () => ( | ||
<StickyHeaderTemplate> | ||
<ControlButtons /> | ||
</StickyHeaderTemplate> | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
StickyHeader
получился универсальный, поэтому версии для gui
и для report
отличаются только дочерними нодами.
const MAX_SHOW_HEADER = 10; | ||
const MIN_HIDE_HEADER = 30; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Такой дебаунс: скрываем хедер, когда проскроллили вниз на 30 пикселей, а обратно возвращаем, когда до верху страницы максимум 10 пикселей.
const shouldShow = scroll => (scroll < MAX_SHOW_HEADER && window.scrollY > MIN_HIDE_HEADER); | ||
const shouldHide = scroll => (scroll > MIN_HIDE_HEADER && window.scrollY < MAX_SHOW_HEADER); | ||
const shouldUpdate = scroll => shouldShow(scroll) || shouldHide(scroll); | ||
const cb = scroll => shouldUpdate(scroll) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут используем коллбек в setState
потому что коллбек сохранит только начальное scrollHeight
, а значит, использовать его напрямую мы не можем, вот и используем такой коллбек, в который передается актуальное значение scroll
. При вызовах setState
реакт сравнивает по значению старый стейт и новый, и обновляет только если они не совпадают, поэтому если мы решили, что обновлять стейт не нужно, можем ему просто себя же передать
&::before { | ||
transform: translateY(50%) rotate(180deg); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Центрируем и переворачиваем стрелочку
} | ||
|
||
.sticky-header__content { | ||
transform: translateY(-100%) scaleY(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Помимо такого транслейта нужно все равно использовать scaleY(0)
. Так то при анимации он незаметен, но если его не использовать, то всякая штука может вылезать сверху страницы. Например, если кто-то раскрыл длинный браузерный список. Ну и на Яндекс браузерах отображалось не очень, потому что Яндекс браузер может "скроллить в отрицательный scrollY
"
8056614
to
c27074d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/ok
@@ -0,0 +1,45 @@ | |||
.sticky-header { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут я бы тоже stylus юзнул
034d088
to
ecfcbd9
Compare
ecfcbd9
to
f2aea96
Compare
No description provided.