vue实现横向时间轴组件

本文介绍了如何使用Vue来创建一个具备动态加载、鼠标悬停显示信息和子节点详情展示功能的横向时间轴组件。通过封装Timeline组件,并在父组件中引用,实现了根据屏幕滚动加载更多内容的效果。

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

前言:项目中有需要用到横向时间轴,网上大部分组件不满足 功能需要,于是自己写了一个。先上简单的demo。

功能:

  1. 默认获取初始数据显示对应的时间轴和时间点。
  2. 当超出屏幕后,滑动滚动条加载更多页,类似分页加载。
  3. 某个大的时间轴节点鼠标放入需要显示相关信息。
  4. 某两个大节点之间会有子节点出现。
  5. 每个子节点会有对应的子节点详情内容展示,无详情内容介绍的只展示子节点。

效果图

vue时间轴视频效果

在这里插入图片描述

代码

Timeline组件封装

<template>
  <ul class="timeline-wrapper" @scroll="scrollEvent">
    <li class="timeline-item" v-for="item in timelineList" :key="item.id">
      <div class="timeline-box">
        <div class="out-circle">
          <div class="in-circle"></div>
          <div class="timeline-date">
            <el-popover
              placement="bottom"
              title="标题"
              width="200"
              trigger="hover"
              :content="item.content"
            >
              <el-button type="text" slot="reference" class="father-text">{
   {
   
                item.date
              }}</el-button>
            </el-popover>
          </div>
        </div>
        <div
          class="long-line"
          v-show="item.isShow"
          :style="`width:${
     
            item.children ? (item.children.length + 1) * 100 : 1 * 100
          }px`"
        >
          <div
            v-for="(subItem, index) in item.children"
            :key="subItem.id"
            class="sub-item-box"
          >
            <span>{
   {
    subItem.name + ":" + subItem.num }}</span>
            <!-- 根据奇数偶数来判断向上还是向下 -->
            <div
              :class="`sub-line-box ${
     
                index % 2 == 0 ? 'top-line-box' : 'bottom-line-box'
              }`"
              v-show="subItem.content"
            >
              <div
                :class="`children-line-box ${
     
                  index % 2 == 0 ? 'top-line' : 'bottom-line'
                }`"
              ></div>
              <div
                :class="`children-box ${
     
                  index % 2 == 0 ? 'top-children-box' : 'bottom-children-box'
                }`"
              >
                {
   {
    subItem.content }}
              </div>
            </div>
          </div>
        </div>
      
### 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、付费专栏及课程。

余额充值