左右实时间轴效果demo(整理)

简介: 左右实时间轴效果demo(整理)

<template>
  <div class="m-timeline-area" :style="`width: ${width}px`">
    <div class="m-timeline">
      <div :class="['m-timeline-item', {'last': index === timelineDesc.length - 1}]"
        v-for="(item, index) in timelineDesc" :key="index">
        <div class="u-tail"></div>
        <div class="u-dot1" v-if="index % 2 != 0"></div>
        <div class="u-dot" v-else></div>
        <!-- <div class="u-content">{{ item.desc || '--' }}</div> -->
        <div class="u-content" v-if="index % 2 != 0">
          <div class="div1">{{ item.time }} 年</div>
          <div class="div2">{{ item.desc }}</div>
        </div>
        <div class="u-content1" v-else>
          <div class="div1">{{ item.time }} 年</div>
          <div class="div2">{{ item.desc }}</div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
  export default {
    name: 'Timeline',
    props: {
      timelineDesc: { // 时间轴内容数组
        type: Array,
        default: () => {
          return []
        }
      },
      width: { // 时间轴区域总宽度
        type: Number,
        // default: 360
      }
    },
    data() {
      return {
        timelineDesc: [{
          desc: '测试测试测试测试',
          time: 2009,
        }, {
          desc: '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试',
          time: 2010,
        }, {
          desc: '测试测试测试测试',
          time: 2012,
        }, {
          desc: '测试测试测试测试',
          time: 2013,
        }, {
          desc: '测试测试测试测试',
          time: 2014,
        }, {
          desc: '测试测试测试测试',
          time: 2015,
        }, {
          desc: '测试测试测试测试',
          time: 2016,
        }],
      }
    },
  }
</script>
<style lang="scss" scoped>
  // @blue: #1890ff;
  // @green: #52c41a;
  // @red: #f5222d;
  // @gray: rgba(0, 0, 0, .25);
  .m-timeline-area {
    width: 1230px;
    margin: 0 auto;
    // background-color: indianred;
    // margin-top: 800px;
    .m-timeline {
      // margin-left: 380px;
      .m-timeline-item {
        position: relative;
        padding-bottom: 30px;
        .u-tail {
          position: absolute;
          top: 10px;
          left: 620px;
          height: calc(100% - 10px);
          border-left: 2px solid #e8e8e8; // 实线
          // border-left: 2px dotted #e8e8e8; // 点线
          // border-left: 2px dashed #e8e8e8; // 虚线
        }
        .u-dot {
          position: absolute;
          left: 615px;
          width: 19px;
          height: 14px;
          background-image: url(../assets/img/img_zhixiang_you.png);
          background-size: 100% 100%;
        }
        .u-dot1 {
          position: absolute;
          left: 610px;
          // top: -4px;
          width: 19px;
          height: 14px;
          background-image: url(../assets/img/img_zhixiang_zuo.png);
          background-size: 100% 100%;
        }
        .u-content {
          width: 570px;
          position: relative;
          top: 0px;
          margin-left: 10px;
          word-break: break-all;
          word-wrap: break-word;
          line-height: 24px;
          // background-color: red;
          text-align: right;
          .div1 {
            font-size: 34px;
            font-family: PingFang-SC-Heavy;
            color: #415B76;
            margin-bottom: 51px;
            padding-top: 10px;
          }
          .div2 {
            font-size: 20px;
            font-family: PingFang-SC-Bold;
            line-height: 35px;
            color: #666666;
            background: #EFEFEF;
            padding: 55px 60px;
          }
        }
        .u-content1 {
          width: 570px;
          position: relative;
          top: 0px;
          left: 630px;
          margin-left: 25px;
          word-break: break-all;
          word-wrap: break-word;
          line-height: 24px;
          // background-color: blue;
          .div1 {
            font-size: 34px;
            font-family: PingFang-SC-Heavy;
            color: #415B76;
            margin-bottom: 51px;
            padding-top: 10px;
          }
          .div2 {
            font-size: 20px;
            font-family: PingFang-SC-Bold;
            line-height: 35px;
            color: #666666;
            background: #EFEFEF;
            padding: 55px 60px;
          }
        }
      }
      .last {
        .u-tail {
          display: none;
        }
      }
    }
  }
</style>
相关文章
|
6天前
简约火箭发射静态404错误页面源码
简约火箭发射静态404错误页面源码
21 0
简约火箭发射静态404错误页面源码
在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
|
10月前
|
API
Echarts实战案例代码(28):象形图与dataZoom组件实现大事记进度图
Echarts实战案例代码(28):象形图与dataZoom组件实现大事记进度图
112 0
鼠标可控的表格滑动(左右)demo效果示例(整理)
鼠标可控的表格滑动(左右)demo效果示例(整理)
360度不停旋转动画demo效果示例(整理)
360度不停旋转动画demo效果示例(整理)
鼠标放上边框变虚转圈效果demo效果示例(整理)
鼠标放上边框变虚转圈效果demo效果示例(整理)
jshtml滚动时间横向显示demo效果示例(整理)
jshtml滚动时间横向显示demo效果示例(整理)
|
10月前
Echarts实战案例代码(6):不设区的地级市行政区划3D工作进度五色图
Echarts实战案例代码(6):不设区的地级市行政区划3D工作进度五色图
67 0
聊天框(番外篇)—如何实现@功能的整体删除
上一篇文章中,我们已经初步实现了聊天输入框,但其@功能是不完善的,例如无法整体删除、无法获取除用户名以外的数据(假设用户名不是唯一的)。有问题就要想办法解决,在网上百度了一圈后,倒是有一些收获。本文就着重解决@的整体删除以及获取额外数据。
966 0
聊天框(番外篇)—如何实现@功能的整体删除
|
设计模式 前端开发 JavaScript
第48/90步《前端篇》第10章 重构页面对象和分界线的绘制 第29课
今天学习《前端篇》第10章 重构页面对象和分界线的绘制 第29课 设计模式重构四:建造者模式、命令模式和原型模式
68 0