Vue Better-Scroll 横向滚动失效,解决方法及心得

Vue Better-Scroll 横向滚动失效,解决方法及心得

菜鸟之言,请多指教

1.Better-Scroll滚动原理

中文文档地址:点我
有时中文文档地址会短暂失效,尚不明确什么原因,请多次刷新或者稍后重试

在一个容器内,让内部第一个元素超出滚动。
  1. 外部容器(wrapper容器)超出隐藏,即:overflow:hidden
  2. 外部容器需定义宽度高度(因为内部容器超过外部容器才能滚动)
  3. 内部容器需定义高度宽度。注:如果是竖向滑动,则内部容器高度不用定义。但横向的滚动,则有可能需要利用js调整宽度。(css会有问题)

2.Better-Scroll横向滚动

查阅文档后我发现,横向滚动有几种方法。
 1.scrollX,默认为false,设置为true时,则开启横向滚动
 2.freeScroll,默认为false,设置为true时,则开始支持横向滚动的支持
 3.eventPassthrough,默认为‘’,设置为‘horizontal’,则开始支持横向滚动的支持

满足本文‘Better-Scroll滚动原理’的三个条件下,经多次测试和烧脑研究后,发现:

  1. scrollX单独为true时,确实可以横向滚动,纵向不受任何影响
  2. scrollX为true,并且freeScroll为true时,亦可以滚动,但是横向滚动时,纵向亦会动一点,体验不太好
  3. scrollX为true,并且eventPassthrough为‘horizontal’时,不能滚动!并且eventPassthrough配置失效。原因不得而知
  4. scrollX为true,并且freeScroll为true时,并且eventPassthrough为‘horizontal’时,又可以完美滚动了。。。

3.心得

  1. scrollX就可以开启横向滚动了
  2. eventPassthrough为‘horizontal’,这个是有用的,例如better-scroll + swiper 嵌套时可用。可以开启横向的切换页面,体验和原生app效果差不多
  3. freeScroll为true时,和eventPassthrough一样,两者皆有的话亦不影响

如有不对之处,请多指教。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,可以尝试使用 better-scroll 库来实现选项卡下面内容左右滑动时上面标签也会随之滑动的效果,以下是代码实现: <template> <div class="tabs"> <div class="tabs-header both"> <div v-for="(tab, index) in tabs" :key="index" :class="{ 'active': activeTab === index }" @click="changeTab(index)"> {{ tab }} </div> </div> <div class="tabs-content" ref="wrapper"> <div class="tabs-inner"> <slot :name="tabs[activeTab]"></slot> </div> </div> </div> </template> <script setup> import { ref, onMounted } from 'vue' import BScroll from 'better-scroll' const props = defineProps({ tabs: { type: Array, required: true } }) let activeTab = ref(0) let tabsScroll = null const changeTab = (index) => { activeTab.value = index tabsScroll.scrollToElement(`.tabs-header > div:nth-child(${index + 1})`, 300, true, true) } onMounted(() => { tabsScroll = new BScroll($refs.wrapper, { scrollX: true, scrollY: false, eventPassthrough: 'vertical' }) }) </script> <style lang="scss" scoped> .tabs { display: flex; flex-direction: column; height: 100%; .tabs-header { display: flex; justify-content: space-between; align-items: center; height: 50px; font-size: 30rpx; > div { position: relative; padding: 0 30rpx; &::before { content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; opacity: 0; transition: opacity 0.2s ease-in-out; } &.active::before { opacity: 1; background-color: #8a74ee; border-radius: 16rpx; } } } .tabs-content { flex: 1; overflow: hidden; .tabs-inner { display: flex; transition: transform 0.2s ease-in-out; > * { flex-shrink: 0; width: 100%; height: 100%; } } } } </style> 主要变化如下: 1. 引入 better-scroll 库,使用 onMounted 钩子在组件挂载后初始化滚动实例。 2. 在 HTML 部分,将插槽内容包裹在一个 .tabs-inner 容器中,用于实现左右滑动效果。 3. 在 CSS 部分,对 .tabs-header 中的选项卡标签进行样式调整,使用 ::before 伪类实现选中状态下的底部标识。 经过以上优化,现在选项卡下面插槽中内容左右滑动时上面标签也会随之滑动了,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值