vue2 实现tabs超出滚动效果
在Vue 2中,你可以通过计算属性和事件监听来实现Tabs的超出滚动效果。以下是一个简单的示例:
<template>
<div class="tabs-container" ref="tabsContainer">
<div class="scroll-buttons">
<button @click="scrollLeft" :disabled="!canScrollLeft"><</button>
<button @click="scrollRight" :disabled="!canScrollRight">></button>
</div>
<div class="tabs-scroll" ref="tabsScroll">
<div class="tabs-wrapper" :style="{ transform: `translateX(${offset}px)` }">
<button v-for="tab in tabs" :key="tab" class="tab-button">
{{ tab }}
</button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tabs: ['Home', 'Profile', 'Settings', 'About', 'Contact', 'More'],
offset: 0
};
},
computed: {
canScrollLeft() {
return this.offset > 0;
},
canScrollRight() {
const containerWidth = this.$refs.tabsContainer.clientWidth;
const scrollWidth = this.$refs.tabsScroll.scrollWidth;
return scrollWidth > containerWidth && this.offset < scrollWidth - containerWidth;
}
},
methods: {
scrollLeft() {
this.offset = Math.max(this.offset - 150, 0);
},
scrollRight() {
const containerWidth = this.$refs.tabsContainer.clientWidth;
const scrollWidth = this.$refs.tabsScroll.scrollWidth;
this.offset = Math.min(this.offset + 150, scrollWidth - containerWidth);
}
}
};
</script>
<style scoped>
.tabs-container {
position: relative;
overflow: hidden;
}
.scroll-buttons {
position: absolute;
top: 0;
z-index: 1;
}
.tabs-scroll {
overflow-x: auto;
white-space: nowrap;
}
.tabs-wrapper {
display: inline-block;
white-space: normal;
transition: transform 0.2s;
}
.tab-button {
display: inline-block;
width: 150px; /* Adjust button width as needed */
height: 40px; /* Adjust button height as needed */
text-align: center;
line-height: 40px;
border: 1px solid #ccc;
background-color: #fff;
margin-right: 2px;
cursor: pointer;
}
</style>
在这个示例中,.tabs-container
是一个有边界的容器,.tabs-scroll
是可滚动的部分,.tabs-wrapper
包含一行按钮(代表Tabs)。计算属性 canScrollLeft
和 canScrollRight
用于判断是否可以向左或向右滚动。scrollLeft
和 scrollRight
方法用于实现滚动逻辑,通过改变 offset
数据属性来移动 .tabs-wrapper
。
请根据你的具体布局和设计需求调整按钮的宽度和高度,以及相关的样式调整。
评论已关闭