我已經在我最喜歡的項目中實現了一個swiper。除了你試圖在移動設備上滑動的部分(尤其是在iOS上,我正在iPhone 13 mini上測試),一切看起來都很棒。滾動工作,但如果你只是重復滑動手勢,頁面會根據滑動角度開始上下移動,我不知道如何修復它。感覺像是滑動器本身太敏感了。
我試著擺弄短擦拭巾和長擦拭巾以及ms,但都無濟于事。我也嘗試過觸摸動作:沒有;在某些swiper事件上,如過渡開始或過渡結束,但它仍然沒有我想要的感覺。我唯一成功實現的是在swiper上阻止TouchStart事件的垂直滾動,但它完全禁用了垂直滾動,但我仍然希望在需要時能夠從Swiper上滾動開。
作為我試圖實現的一個例子,當谷歌搜索一個演員時,你可以看看移動谷歌搜索頁面,你可以看到一個電影轉盤,感覺很好,運行流暢。我怎樣才能實現這一點?
這是我的刷卡代碼:
<Swiper className={`${styles.swiper} ${mobileScrollLock ? styles['swiper-scroll-lock'] : ''}`}
onSwiper={setSwiperInstance}
onTouchEnd={onTouchEnd}
onBeforeTransitionStart={() => setMobileScrollLock(true)}
onTransitionEnd={() => setMobileScrollLock(false)}
modules={[Mousewheel, FreeMode]}
spaceBetween={10}
slidesPerView='auto'
mousewheel
freeMode={{
enabled: true,
sticky: true,
}}
>
{loading.newPosts && <SwiperSlide className={styles['post-item-spinner']} key='spinner'><Spinner /></SwiperSlide>}
{postsData && postsData.map((post: TStory) => {
return <SwiperSlide className={styles['swiper-slide']} key={post.id}>
<PostItem post={post} />
</SwiperSlide>
})}
{loading.oldPosts && <SwiperSlide className={styles['post-item-spinner']} key='spinner'><Spinner /></SwiperSlide>}
</Swiper>
下面是使用的函數:
const onTouchEnd = (swiper: SwiperType) => {
if (swiper.progress < 0) checkNewPosts();
if (-swiper.translate > swiper.snapGrid[swiper.snapGrid.length - 1] + 100 && !limit) {
setLoading({ postFeed: false, newPosts: false, oldPosts: true });
addOlderPosts();
}
}
const enableScroll = () => window.onscroll = null;
const disableScroll = () => {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
window.onscroll = () => window.scroll({ top: scrollTop });
}
下一篇vue data數據