vue实现横向时间轴,并实现右滑加载数据
warning:
这篇文章距离上次修改已过282天,其中的内容可能已经有所变动。
在Vue中实现横向时间轴,并且支持右滑加载数据,可以使用第三方库如vue-timeline
或者自己手动编写组件。以下是一个简单的自定义组件示例,实现了基本的横向时间轴和右滑加载数据的功能。
<template>
<div class="timeline" @scroll="handleScroll">
<div class="timeline-container" :style="{ 'width': totalWidth + 'px' }">
<div class="timeline-item" v-for="(item, index) in items" :key="index" :style="{ 'left': item.left + 'px' }">
<div class="timeline-content">
{{ item.content }}
</div>
</div>
</div>
<div v-if="isLoading" class="loading-indicator">
加载中...
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [],
totalWidth: 1000, // 假设总宽度是1000px
itemWidth: 100, // 每个时间轴项的宽度
isLoading: false
};
},
methods: {
handleScroll(event) {
if (event.target.scrollWidth - (event.target.scrollLeft + event.target.clientWidth) < 50) {
this.loadMoreData();
}
},
loadMoreData() {
if (this.isLoading) return;
this.isLoading = true;
// 模拟异步加载数据
setTimeout(() => {
const newItem = {
left: this.items.length * this.itemWidth,
content: `Item ${this.items.length + 1}`
};
this.items.push(newItem);
this.totalWidth += this.itemWidth;
this.isLoading = false;
}, 1000);
}
},
mounted() {
this.loadMoreData(); // 初始加载数据
}
};
</script>
<style scoped>
.timeline {
overflow-x: auto;
position: relative;
}
.timeline-container {
position: relative;
white-space: nowrap;
}
.timeline-item {
position: absolute;
white-space: normal;
}
.timeline-content {
border: 1px solid #ccc;
padding: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
margin: 5px 0;
width: 100px;
}
.loading-indicator {
position: absolute;
top: 0;
right: 0;
padding: 10px;
}
</style>
这个组件包括一个横向的时间轴容器,每个时间轴项目都是通过左侧位置left
属性来定位的。当滚动条靠近容器的右边缘时,会触发handleScroll
方法,并在该方法中调用loadMoreData
来加载更多数据。数据加载时,会通过设置isLoading
来显示加载状态,并在数据加载完成后更新时间轴的总宽度。
请注意,这个示例是一个简化的实现,并且没有处理边界情况,如时间轴项的内容太长超出容器宽度的情况。实际应用中需要根据具体需求进行相应的调整和优化。
评论已关闭