vue实现横向时间轴

下面是Vue实现横向时间轴的完整攻略。

实现思路

实现横向时间轴的关键在于CSS部分的设计。我们需要定义好每个时间点的样式以及它们之间的间隔。

在Vue中,我们可以采用循环遍历的方式,动态生成时间点列表。同时,为了实现滚动效果,我们需要监听鼠标事件,并且动态计算容器滚动的距离。

具体实现

第一步:HTML结构

我们需要先定义好HTML结构。

<div class="container">
  <div class="timeline">
    <div class="timeline-item" v-for="(item, index) in timelineList" :key="index" :style="{ left: item.left + 'px' }" >
      <div class="timeline-item-title">
        {{ item.year }}
      </div>
    </div>
  </div>
</div>

其中,container为容器,timeline为横向时间轴的包裹容器,timeline-item为每个时间点对应的元素,timeline-item-title为每个时间点的标题。

第二步:CSS样式

接下来,我们需要定义相应的CSS样式。

.container {
  overflow-x: auto;
  white-space: nowrap;
  width: 100%;
}

.timeline {
  height: 4px;
  background-color: #ddd;
  position: relative;
}

.timeline-item {
  position: absolute;
  top: -6px;
  display: inline-block;
  width: 20px;
  height: 20px;
  background-color: #fff;
  border: 2px solid #ddd;
  border-radius: 50%;
}

.timeline-item-title {
  text-align: center;
  white-space: nowrap;
  width: 60px;
  margin-left: -20px;
  font-size: 12px;
}

其中,container设置为可滚动的,同时用white-space: nowrap属性来防止换行。timeline为横向时间轴的底部,用来承载每个时间点。timeline-item为每个时间点对应的元素,设置为绝对定位,用display: inline-block来实现在同一行的效果。timeline-item-title为每个时间点的标题,用width属性来设置标题的长度,当长度超过时间点宽度时,会自动换行。

第三步:Vue逻辑

最后,我们需要用Vue来实现动态绑定时间点数据以及计算容器滚动距离。

export default {
  data() {
    return {
      timelineList: [
        { year: '2021', left: 0 },
        { year: '2022', left: 100 },
        { year: '2023', left: 200 },
        { year: '2024', left: 300 },
        { year: '2025', left: 400 },
        { year: '2026', left: 500 },
        { year: '2027', left: 600 },
        { year: '2028', left: 700 },
        { year: '2029', left: 800 },
      ],
      containerWidth: 0,
      isDragging: false,
      lastClientX: 0,
      scrollLeft: 0,
    };
  },
  computed: {
    containerStyle() {
      return {
        width: `${this.containerWidth}px`,
      };
    },
  },
  mounted() {
    this.$nextTick(() => {
      this.containerWidth = this.$refs.container.clientWidth;
    });

    window.addEventListener('mousemove', this.handleMouseMove);
    window.addEventListener('mouseup', this.handleMouseUp);
  },
  beforeDestroy() {
    window.removeEventListener('mousemove', this.handleMouseMove);
    window.removeEventListener('mouseup', this.handleMouseUp);
  },
  methods: {
    handleMouseDown(event) {
      this.isDragging = true;
      this.lastClientX = event.clientX;
      this.scrollLeft = this.$refs.container.scrollLeft;
    },
    handleMouseMove(event) {
      if (!this.isDragging) {
        return;
      }

      const deltaX = event.clientX - this.lastClientX;
      const newScrollLeft = this.scrollLeft - deltaX;
      this.$refs.container.scrollLeft = newScrollLeft;
    },
    handleMouseUp(event) {
      this.isDragging = false;
    },
  },
};

其中,timelineList为存储时间点数据的数组,left属性用来动态计算每个时间点离底部的距离。containerWidth为容器的宽度,用来计算滚动距离。isDragging、lastClientX、scrollLeft用来记录是否拖拽,上次的鼠标位置以及当前容器的滚动距离。

为了实现拖拽滚动的效果,我们需要监听鼠标事件,并且计算拖拽的距离来实现容器的滚动。

示例

以下是两个基于Vue实现的横向时间轴的示例:

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现横向时间轴 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 详解vue-meta如何让你更优雅的管理头部标签

    下面是详解vue-meta如何让你更优雅的管理头部标签的攻略。 什么是vue-meta? vue-meta 是在Vue中操作头部标签(meta 标签、title 标签等等)的一个插件。通过 vue-meta 可以让我们在 Vue 组件内方便的定义和修改这些标签。使用 vue-meta ,我们可以更加方便和优雅的管理头部标签,从而使得我们的网站更加 SEO 友…

    Vue 2023年5月28日
    00
  • Vue实现添加数据到二维数组并显示

    针对“Vue实现添加数据到二维数组并显示”的问题,我可以提供以下完整攻略: 步骤一:创建Vue实例 首先,我们需要创建Vue实例并定义数据。这里我提供一个简单的示例: <div id="app"> <button @click="addData">添加数据</button> <…

    Vue 2023年5月28日
    00
  • Vue生命周期实例分析总结

    Vue生命周期实例分析总结 生命周期钩子函数 Vue实例有一个完整的生命周期,从开始创建、初始化数据、编译模板、挂载DOM、渲染、更新、销毁等一系列过程,我们称这是Vue的生命周期,通常也称为生命周期钩子函数。生命周期钩子函数包含如下几个阶段: beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性。 c…

    Vue 2023年5月28日
    00
  • vue+elementUl导入文件方式(判断文件格式)

    下面是详细讲解“vue+elementUl导入文件方式(判断文件格式)”的完整攻略。 1. 需要用到的技术栈 本文使用的技术栈为:Vue + ElementUI。 2. 文件导入方式 Vue + ElementUI 实现文件的导入方式主要分为以下几个步骤: 2.1 导入 ElementUI Upload 组件 ElementUI 提供了 Upload 组件,…

    Vue 2023年5月28日
    00
  • vue3中的伸缩菜单组件

    下面我将详细讲解“Vue3中的伸缩菜单组件”的完整攻略。 一、概述 伸缩菜单组件是一个常用的组件,它可以让用户在界面上添加一些操作面板,具体实现方式就是点击按钮后,菜单面板会出现或者隐藏。在Vue3中,我们可以使用自定义指令实现这种效果。 二、实现步骤 以下是实现伸缩菜单的具体步骤: 1. 创建Vue3应用 我们需要先创建一个Vue3应用,方法如下: vue…

    Vue 2023年5月28日
    00
  • 详细聊聊Vue中的options选项

    接下来我将详细聊聊Vue中的options选项。 什么是Vue中的options选项 在Vue中,每个组件都可以定义一些可选的选项。这些选项可以用来配置组件的行为和功能。Vue的选项可以分为两类:数据选项和组件选项。 数据选项:Vue组件中的数据选项是一个JavaScript对象,用于传递数据到组件模板中。数据选项包括data、props、computed、…

    Vue 2023年5月28日
    00
  • 深入探讨Vue 3中的组合式函数编程方式

    深入探讨Vue 3中的组合式函数编程方式 在Vue 3中,组合式函数编程(Composition API)是一种新的编程方式,它支持更加灵活和复杂的业务逻辑,比以往的Options API更加直观和易用。在这篇文章中,我们将深入探讨Vue 3中的组合式函数编程方式,并给出两个示例说明。 什么是组合式函数编程? 组合式函数编程是指将一个组件中的逻辑分解成一组有…

    Vue 2023年5月27日
    00
  • 使用electron将vue-cli项目打包成exe的方法

    下面是使用electron将vue-cli项目打包成exe的详细攻略: 1. 准备工作 在开始之前,你需要确保你的电脑已经安装了以下软件: Node.js npm包管理器 Vue CLI Git 其中,Node.js建议选择LTS版本,npm建议升级至最新版本。 2. 创建Vue项目 接下来,我们来创建一个Vue项目。在命令行中输入以下命令: vue cre…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部