vue项目中利用css实现简单的时间轴

本文介绍如何在Vue项目中实现一个垂直时间轴,展示时分秒,并能水平滑动选择日期。通过CSS实现时间线效果,利用border边框和图片结合。同时,借助微信小程序的scroll-view组件,实现横向滑动查看日期的功能。文章提供了HTML、CSS和JS的实现细节。

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

需求

竖直方向上是一栏时间轴(显示时分秒),水平方向上可以选择时间(日期),且可以横向滑动.

实现

竖向

先写一个大的div,包含整个卡片的内容,里面有一张圆点图片,一条时间线,还有里面的时间信息,图片文字信息。
时间线的思路是:利用css 中border边框来显示,如果要加入动态效果,比如改变颜色,可以通过JS或者hover属性来切换这条线的颜色。
实现的效果图:
这里写图片描述

html:

<div class="message">
    <div class="circle"><img src="../../../static/icon/main.png" alt=""></div><span class="time">{{item.time}}</span>
    <div class="lineborder">
      <img src="../../../static/icon/main.png" alt="">
      <!--<p>text</p>-->
    </div>
  </div>

CSS:

.message{
    display: block;
    width: 100%;
    height: 450rpx;
  }
  .circle{
    margin-left: 28rpx;
    margin-right: 50rpx;
    display: block;
    height: 50rpx;
    width: 50rpx;
    float: left;
  }
  .lineborder{
    margin-left: 50rpx;
    display: block;
    height: 400rpx;
    width: 100%;
    left: 200rpx;
    border-left: 5rpx solid #999999;
  }
  .lineborder img{
    display: block;
    width: 200rpx;
    height: 300rpx;
    margin:0 auto;
  }
  .lineborder p{
    margin-left:80rpx ;
  }
  .circle img{
    max-width:100%;
    max-height:100%;
  }

完成单个卡片之后,使用v-for进行循环

<div class="message" v-for="item in timeAxis2">
    <div class="circle"><img src="../../../static/icon/main.png" alt=""></div><span class="time">{{item.time}}</span>
    <div class="lineborder">
      <img src="../../../static/icon/main.png" alt="">
      <!--<p>text</p>-->
    </div>
  </div>

最后的效果:
这里写图片描述

横向

效果图:
这里写图片描述

思路

该功能跟上文的竖向一样,也是通过图片+边框线的形式完成的,加了一个点击图片显示日期的功能呢,然后用了微信小程序的scroll-view组件,来实现滑动的效果。具体代码如下:

html

<scroll-view class="scrollView" scroll-x="true" scroll-with-animation="true">
      <div class="scrollBack" v-for="(item,index)  in timeAxis1"  >
        <img src="../../../static/icon/main.png" alt="" @click="showIt(index)">
        <div class="nav">
        <p v-show="item.showTime">{{item.time}}</p>
        </div>
      </div>
    </scroll-view>

html的具体思路是通过一个大的div包裹里面的图片元素,线元素和文字元素,通过CSS进行排版。然后用V-for进行循环显示。

css

.scrollView{
    display:block;
    width:100%;
    height:140rpx;
    overflow:hidden;
    white-space:nowrap;
    margin-left:30rpx;
  }
  .scrollBack{
    display:inline-block;
    height:100rpx;
    width:50%;
    margin-right:50rpx;
  }
  .nav{
    margin-top:30rpx;
    display:inline-block;
    height:55rpx;
    width:50%;
    border-top:5rpx solid #999999;
    font-size:45rpx;
    position:absolute;
  }
  .scrollBack img{
    display:inline-block;
    width:50rpx;
    height:50rpx;
    margin-bottom:-12rpx
  }
  .scrollBack p{
    margin: 0 auto;
  }
  1. 排版过程中线与图像不对齐:设置图像display属性为inline-block,设置margin-bottom来对齐时间线。

  2. 文字隐藏时,上面的图像和线会掉下来:暂时还未解决,用了个取巧的办法,把文字放到时间线的div框里,就可以正常显示不会改变其他元素的位置。

JS

timeAxis1: [
          {time: '8月10日', showTime: false},
          {time: '8月11日', showTime: true},
          {time: '8月12日', showTime: false},
          {time: '8月13日', showTime: false},
          {time: '8月14日', showTime: false}
        ]
  showIt (index) {
        this.timeAxis1[index].showTime = !this.timeAxis1[index].showTime
      },

用于微信小程序不能直接操作DOM,所以在timeAxis中设置了多个showTime,用来监听每个日期的显示,用户点击图像,便会显示日期,再点击一次,程序取反然后便可以隐藏日期。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值