Vue之时间轴组件

本文介绍了如何使用Vue创建时间轴组件,详细讲解了页面结构的划分:左侧时间、中间圆点、右侧内容和虚线部分。通过设置相对布局和绝对定位,实现了各个部分的精确显示。文章还提供了一个GitHub项目的链接,供读者参考和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

github地址:https://github.com/SunshineMibai/vue-timeline 

实现思路及步骤:

页面分为四个部分

1、左侧时间

2、中间圆点

3、右侧内容

4、虚线部分

 

最外层div,relative布局,方便子元素计算尺寸

左侧时间固定宽度,显示时间(本demo:100px),之后absolute绝对定位(left:0)

中间圆点absolute绝对定位,因为左侧宽度已经定为100px,圆点left值只需要大于100px肯定就会显示在时间右侧(具体值可以根据需求修改)

最右侧的内容展示区域同理也是ab定位,值大于左侧时间left值+圆点时间left值就可以(具体值可以根据需求修改)

最后只剩下虚线部分就可以得出结论,虚线的left值 = 圆点距离左侧时间-圆点宽度的一半

此时,虚线正好压在圆点中间部分,调整一下圆点和虚线的z-index值,即可

 

HTML代码:
<div class='time-line'>
	<div v-for='item in testList' class='time-line-div'>
		<p>{{item.time}}</p>
		<p ref='circular'></p>
		<p>{{item.text}}</p>
	</div>
	<div class='img-dotted' ref='dotted'></div>
</div>



JS代码:
mounted() {
	this.$refs.dotted.style.left = this.$refs.circular[0].offsetLeft - 12 + 'px'
}

Css代码:
.time h2{
	color:#FF6600;
	margin: 20px auto 30px auto;
}
.time-line{
	position: relative;
	width:300px;
	margin:0 auto;
}
.time-line-div{
	position:relative;
	min-height:85px;
}
.time-line-div>p:nth-child(1){
	position: absolute;
	left:0;
	width:100px;
}
.time-line-div>p:nth-child(2){
	position:absolute;
	left: 100px;
	width:15px;
	height:15px;
	top:10px;
	background:#5CB85C;
	border-radius: 50%;
	z-index: 10
}
.time-line-div>p:nth-child(3){
	position:absolute;
	left: 130px;
	padding: 10px;
	background: #317EF3;
	font-size:.8rem;
	color:#fff;
	border-radius: 10px;
}
.img-dotted{
	position:absolute;
	width:20px;
	height:100%;
	top:0;
	z-index: 1;
	background:url('/static/images/vue/dotted.png');
}
.time-line-detail>p{
	margin-left: 30px;
	margin-bottom: 10px;
}

转载于:https://www.cnblogs.com/boxjs/p/10368494.html

### Vue.js 横向时间轴组件实现 为了创建一个Vue.js中的横向时间轴组件,可以基于现有库或自定义开发。这里提供一种利用`TimelineSliderVue`来构建带有交互特性的横向时间轴的方法[^2]。 #### 使用 `TimelineSliderVue` 安装依赖: ```bash npm install timeline-slider-vue --save ``` 配置入口文件(main.js): ```javascript import Vue from 'vue' import TimelineSliderVue from 'timeline-slider-vue' import 'timeline-slider-vue/lib/timeline-slider-vue.css' Vue.use(TimelineSliderVue); ``` 在模板中使用该组件: ```html <Template> <div id="app"> <!-- 配置属性 --> <TimelineSliderVue :date="dates" :mask="true" :mark-date="highlightedDates" :play="false" :play-speed="1000" @change="onDateChange" @input="updateSelectedDate"> <!-- 自定义内容区域 --> <template v-slot:sliderContent="{ data }"> <div class="custom-timeline-item">{{ formatDate(data) }}</div> </template> </TimelineSliderVue> </div> </Template> ``` 此示例展示了如何通过插槽(slot)机制来自定义每个时间点的内容呈现方式,并且可以通过监听事件(`@change`, `@input`)响应用户的操作行为[^3]。 对于更复杂的需求比如交错显示卡片信息,则可能需要进一步定制CSS样式以及调整JavaScript逻辑以满足特定的设计要求。如果想要达到类似的效果——即在一侧展示部分节点而另一些则出现在对面一侧形成交错视觉效果的话,那么就需要额外编写一些布局相关的代码了。 另外,考虑到性能优化方面的问题,在处理大量数据时建议采用虚拟列表技术只渲染可见区域内的时间项;而对于移动端的支持来说,确保触摸手势的良好体验也是很重要的考量因素之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值