Vue 实现带拖动功能的时间轴

1.效果图

2. 

当使用timeline-slider-vue组件时,你可以设置以下属性:

  1. date:用于设置时间轴滑块的初始日期,格式通常为 YYYY-MM-DD。

  2. mask:一个布尔值,用于控制是否显示背景遮罩。

  3. markDate:一个数组,用于标记特定日期,在时间轴上会有相应的标记显示。

  4. lockDate:一个数组,用于锁定日期,当滑动结束时自动跳到指定的日期。

3.js部分

 

环境

node V12.20.0

npm 6.14.8

📦 Install

npm install --save timeline-slider-vue

全局引用

main.js

import TimelineSliderVue from 'timeline-slider-vue'

import 'timeline-slider-vue/lib/timeline-slider-vue.css'

Vue.use(TimelineSliderVue)

🔧 Usage

<TimelineSliderVue>

<div

slot="sliderContent"

slot-scope="scope">

{{ scope.data }}

</div>

</TimelineSliderVue>

使用示例

<template>

<div id="app">

<TimelineSliderVue

:date="date"

:mask="mask"

:mark-date="markDate"

:lock-date="lockDate"

@change="handleChange"

@input="handleInput"

>

<div slot="sliderContent" slot-scope="scope">

{{ scope.data }}

</div>

</TimelineSliderVue>

</div>

</template>

<script>

export default {

data() {

return {

lockDate: [], // 锁定的日期(滑动结束时自动跳到指定的日期)

markDate: [], // 做标记的日期

mask: true,

date: '2022-06-01',

}

},

methods: {

handleInput(value, date) {

console.log('........input', value, date)

},

handleChange(value, date) {

console.log('........change', value, date)

},

},

}

</script>

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现拖动功能时间轴可以借助 Vue.js 的指令和事件绑定来完成。以下是一个简单的实现示例: 1. 安装依赖 首先需要安装依赖,包括 Vue.js 和一个支持拖拽的库,比如 Sortable.js。 ``` npm install vue sortablejs --save ``` 2. 创建组件 创建一个时间轴组件,在其中引入 Sortable.js 和 Vue 的指令。 ```html <template> <div class="timeline"> <div class="timeline__item" v-for="item in items" :key="item.id" :data-id="item.id" :style="{ left: item.left + 'px' }"> {{ item.date }} - {{ item.title }} </div> </div> </template> <script> import Sortable from 'sortablejs'; export default { name: 'Timeline', props: { items: { type: Array, required: true } }, mounted() { const el = this.$el; // 初始化 Sortable.js 实例 new Sortable(el, { draggable: '.timeline__item', onEnd: this.onEnd }); }, methods: { onEnd(event) { // 获取当前元素的位置信息 const id = event.item.getAttribute('data-id'); const index = Array.from(event.to.children).indexOf(event.item); const left = event.item.offsetLeft; // 调用父组件的方法更新数据 this.$emit('update-item', { id, index, left }); } } }; </script> ``` 3. 使用组件 在父组件中使用时间轴组件,并传入需要显示的数据。 ```html <template> <div> <timeline :items="items" @update-item="updateItem"></timeline> </div> </template> <script> import Timeline from './Timeline.vue'; export default { components: { Timeline }, data() { return { items: [ { id: 1, date: '2021-01-01', title: 'Event 1', left: 0 }, { id: 2, date: '2021-02-01', title: 'Event 2', left: 200 }, { id: 3, date: '2021-03-01', title: 'Event 3', left: 400 }, { id: 4, date: '2021-04-01', title: 'Event 4', left: 600 }, { id: 5, date: '2021-05-01', title: 'Event 5', left: 800 } ] }; }, methods: { updateItem({ id, index, left }) { // 更新对应的数据项的位置信息 const item = this.items.find(item => item.id === Number(id)); item.left = left; // 移动数据项的位置 this.items.splice(index, 0, this.items.splice(this.items.indexOf(item), 1)[0]); } } }; </script> ``` 通过以上代码,可以实现一个简单的拖动功能时间轴。用户可以通过鼠标拖动时间轴上的事件,改变事件的位置和顺序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值