-
Notifications
You must be signed in to change notification settings - Fork 636
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
Рецепт с горизонтальным скроллом и тенями на телефоне #4299
Comments
Код мной был написан на вью 2, могу перенести на ванильный JS. mixin: export default {
data() {
return {
visibleShadowRight: true,
visibleShadowLeft: false,
};
},
destroyed() {
this.removeListenerScroll();
},
methods: {
addListenerScroll() {
this.$nextTick(() => {
this.$refs.container.addEventListener('touchmove', this.onScrollContainer);
});
},
removeListenerScroll() {
if (this.$refs.container) {
this.$refs.container.removeEventListener('touchmove', this.onScrollContainer);
}
},
onScrollContainer() {
const { scrollLeft } = this.$refs.container;
this.visibleShadowRight = scrollLeft <= 0;
this.visibleShadowLeft = scrollLeft > 0;
},
}
}; Стили: .scroll-shadow {
z-index: 2;
width: calc(100% + 32px);
position: absolute;
top: 0;
left: -16px;
transition: 0.4s all;
pointer-events: none;
&--right {
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 74.65%,
rgba(255, 255, 255, 0.6) 100%);
}
&--left {
background: linear-gradient(270deg,
rgba(255, 255, 255, 0) 76.32%, rgba(255, 255, 255, 0.6) 100%);
}
&--hide {
opacity: 0;
}
} Клик по элементу: onClick(card) {
const container = document.querySelector(`[data-saved-card="${card.id}"]`);
container.scrollIntoView({
behavior: 'smooth',
block: 'center',
inline: 'center',
});
/* other logic */
}, Разметка: <div>
<div ref="container" class="component__container">
<div></div>
<div></div>
<div></div>
</div>
</div>
<div
class="component__shadow scroll-shadow scroll-shadow--left"
:class="{
'scroll-shadow__shadow--hide': !visibleShadowRight
}"
></div>
<div
class="component__shadow scroll-shadow scroll-shadow--right"
:class="{
'scroll-shadow__shadow--hide': !visibleShadowLeft
}"
></div>
</div> Стили компонента: .component {
&__shadow {
height: 44px;
}
&__container {
padding: 0 16px;
margin: 16px -16px;
z-index: 3;
display: flex;
gap: 8px;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
&::-webkit-scrollbar {
display: none;
}
}
} |
Код лишён логики проекта, в нём осталось только то, что относится к миксину*. |
@punkmachine очень жду этот рецепт! 🙏 |
@punkmachine привет! Как успехи с этим рецептом? |
@solarrust блин, у меня всё руки не доходят. |
@punkmachine давай хотя бы так =) Присылай сразу пулреквест, в нём и допишем текст статьи |
Тема
Написать рецепт горизонтального скролла на телефоне, в котором будет работать логика того, что при клике на элемент. к нему будет идти скролл. Также, самое сложное, что было для меня в этой задаче, справа и слева должны появляться тени.
Зачем
Недавно у меня была таска рабочая с таким скроллом. Были затруднения, с которыми помогла Алёна Батицкая в чате. Могу перенести код, который написал с этим скроллом сюда и описать. Думаю будет полезно.
Кто напишет материал
The text was updated successfully, but these errors were encountered: