使用 ant-design-vue 的 tabs 组件,如何实现滚动条滚到 tabs 位置的时候 tab 吸顶,向上滚动时也能正常显示 tabs 上面的内容?
如题,请问vue页面使用an-design-vue的tabs组件,如何实现滚动条滚到tabs位置的时候tab吸顶,然后滚动条可以继续向下滚动查看内容,向上滚动时也能正常显示tabs上面的内容?
我的思路是:获取tabs距离顶部的距离,再跟滚动条距顶的距离做比较,tabs距顶>滚动距离时,用定位。
然后行不通,position: sticky不生效,兼容浏览器和父盒子不设置overflow:hidden、高度大于tabs都设置了,但就是不行。
改用position: fixed,刚到达距离判断的时候,能固定一瞬间,然后滚动条就自动回弹顶部,呈现的效果就是个bug:滚动条都不能正常滚动了
以下是代码
<div ref="scrollPositionContainer"
class="h-full bg-[#F5F5F5] py-[14px] px-[20px] overflow-y-auto"
@scroll="handleScroll"
>
<div class="parent bg-primary">
<product-info />
<a-tabs
v-model:activeKey="activeKey"
:tabBarGutter="30"
class="tabs w-auto h-auto bg-[#FFFFFF] py-[14px] px-[20px] mt-10px box-border"
:class="isFixed ? 'isfixed' : ''"
>
<a-tab-pane key="performance" tab="111">
<perform-trend-tab />
</a-tab-pane>
<a-tab-pane key="style" tab="222" force-render>Content of Tab Pane 2</a-tab-pane>
<a-tab-pane key="analys" tab="333">Content of Tab Pane 3</a-tab-pane>
</a-tabs>
</div>
</div>
const handleScroll = (e: any) => { scrollTop.value = e.target.scrollTop
const top = window.pageYOffset || e.target.scrollTop
// 此处是判断tab距顶和滚动距离,超过就让a-tabs的class加上isfixed的样式
isFixed.value =top >= barOffsetTop.value ? true : false
}
onActivated(() => { scrollPositionContainer.value?.scrollTo({ top: scrollTop.value })
nextTick(() => {
// 此处是获取tabs距顶的距离
barOffsetTop.value += document.getElementsByClassName('tabs')[0]?.offsetTop
console.log(barOffsetTop.value)
})
})
// 这是样式<style lang="less" scoped>
:deep(.ant-tabs > .ant-tabs-nav) {
margin: 0;
background: #fff;
padding-left: 20px;
box-sizing: border-box;
}
:deep(.ant-tabs-content-holder) {
height: auto;
overflow-y: scroll;
}
.parent {
position: relative;
}
.isfixed{
// position: sticky;
// position: -webkit-sticky;
position: fixed;
top: 0;
}
</style>
以上是 使用 ant-design-vue 的 tabs 组件,如何实现滚动条滚到 tabs 位置的时候 tab 吸顶,向上滚动时也能正常显示 tabs 上面的内容? 的全部内容, 来源链接: utcz.com/p/935238.html