基于vue实现8小时带刻度的时间轴根据当前时间实时定位功能

 更新时间:2023年05月16日 17:19:27   作者:小馨  
这篇文章主要介绍了基于vue实现8小时带刻度的时间轴根据当前时间实时定位功能,开始时间、结束时间可配置,根据当前时间初始化位置,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

效果图:

 需求:

1 开始时间、结束时间可配置
2 时差固定8小时
3 根据当前时间初始化位置
4 每隔5s刷新位置
5 超过结束时间停止刷新

HTML:

<div class="time-axis">
    <div class="startTime">{{start_time}}</div>
    <div class="endTime">{{end_time}}</div>
    <!-- 小时刻度 -->
    <div class="hourLine">
      <div class="line" v-for="index of 8" :key="index" :style="{left: `${90*(index-1)}px`}">
        <div class="secondLine">
          <div class="second" v-for="index of 4" :key="index" :style="{left: `${18*(index-1)}px`}"></div>
        </div>
      </div>
    </div>
    <!-- 指针 -->
    <div class="point" :style="{left: `${current_position}px`}" v-if="pointFlag">
      <div class="currentTime">{{current_time}}</div>
      <img src="@/assets/img/gateway/timeLine_point.png" alt="">
    </div>
  </div>

JS:

props: {
    start_time: {
      type: String,
      default: '',
    },
    end_time: {
      type: String,
      default: '',
    },
    currentTimeFromP: {
      type: String,
      default: '',
    },
  },
  data() {
    return {
      current_time: '10:00:00',
      allSecond: 0,
      st_second: '',
      et_second: '',
      current_second: '',
      current_position: '',
      timer: null,
      pointFlag: true,
    }
  },
  beforeDestroy() {
    if(this.timer) {
      clearInterval(this.timer); 
    }
  },
  mounted() {
    this.st_second = this.hmsToS(this.start_time)
    this.et_second = this.hmsToS(this.end_time)
    // 8小时总秒
    this.allSecond = this.hmsToS(this.end_time) - this.hmsToS(this.start_time)
    // 计算当前位置
    this.current_position = this.bibliography() * 722
    // 判断当前时间是否超过结束时间或者小于开始时间
    if(this.current_second>=this.et_second || this.current_second<this.st_second ) {
      this.$message.warning('当前时间不在服务范围内')
      this.pointFlag = false
    } else {
      this.timer = setInterval(() => {
        if(this.current_second>=this.et_second || this.current_second<this.st_second ) {
          clearInterval(this.timer)
          this.$message.warning('当前时间不在服务范围内')
          this.pointFlag = false
        }
        this.current_position = this.bibliography() * 722
      }, 5000)
    }
  },
  methods: {
    // 比例 = (当前时间 - 开始时间) / 总秒数
    bibliography() {
      // 当前时间秒数
      this.current_second = this.hmsToS(this.nowDataToHMS())
      let key = (this.current_second - this.st_second) / this.allSecond
      return key
    },
    // 时分秒转化秒
    hmsToS(e) {
      var time = e;
      var len= time.split(':')
      if(len.length==3){
        var hour = time.split(':')[0];
        var min = time.split(':')[1];
        var sec = time.split(':')[2];
        return  Number(hour*3600) + Number(min*60) + Number(sec);
      }
      if(len.length==2){
        var min = time.split(':')[0];
        var sec = time.split(':')[1];
        return Number(min*60) + Number(sec);
      }
      if(len.length==1){
        var sec = time.split(':')[0];
        return Number(sec);
      }
    },
    // 当前时间时分秒
    nowDataToHMS() {
      let myDate = new Date()
      let str = myDate.toTimeString()
      this.current_time = str.substring(0,8)
      return this.current_time
    },
  },

CSS:

.time-axis {
  position: relative;
  height: 26px;
  border-left: 2px solid rgba(255,255,255,.6);
  border-right: 2px solid rgba(255,255,255,.6);
  width: 720px;
  background: rgba(0,0,0,.2);
  color: #fff;
  .startTime {
    position: absolute;
    top: -20px;
    left: -25px;
    color: #fff;
  }
  .endTime {
    position: absolute;
    top: -20px;
    right: -25px;
    color: #fff;
  }
  .hourLine {
    height: 70%;
    width: 100%;
    position: absolute;
    bottom: 0;
    display: flex;
    .line {
      position: absolute;
      width: 90px;
      height: 100%;
      border-right: 1px solid rgba(255,255,255,.6);
      &:nth-child(8) {
        border-right: none;
      }
      .secondLine {
        height: 50%;
        width: 100%;
        position: absolute;
        bottom: 0;
        display: flex;
        .second{
          position: absolute;
          width: 18px;
          height: 100%;
          border-right: 1px solid rgba(255,255,255,.3);
        }
      }
    }
  }
  .point {
    position: absolute;
    left: -8px;
    .currentTime {
      position: absolute;
      bottom: -10px;
      left: -18px;
      color: #00D4FF;
    }
    img {
      width: 16px;
      height: 46px;
    }
  }
}

到此这篇关于基于vue实现8小时带刻度的时间轴根据当前时间实时定位功能的文章就介绍到这了,更多相关vue带刻度时间轴内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue使用Axios做ajax请求详解

    vue使用Axios做ajax请求详解

    本篇文章主要介绍了vue使用Axios做ajax请求详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Vue常见面试题整理【值得收藏】

    Vue常见面试题整理【值得收藏】

    本文是小编给大家收藏整理的Vue常见面试题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • vue右键菜单的简单封装

    vue右键菜单的简单封装

    这篇文章主要为大家详细介绍了vue右键菜单的简单封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue引入高德地图并绘制点线面的方法

    vue引入高德地图并绘制点线面的方法

    这篇文章主要介绍了vue引入高德地图并绘制点线面的实例代码,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-03-03
  • vue中mock数据,模拟后台接口实例

    vue中mock数据,模拟后台接口实例

    这篇文章主要介绍了vue中mock数据,模拟后台接口实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue.js中Vue-router 2.0基础实践教程

    vue.js中Vue-router 2.0基础实践教程

    这篇文章主要给大家介绍了关于vue.js中Vue-router 2.0基础实践的相关资料,其中包括vue-router 2.0的基础用法、动态路由匹配、嵌套路由、编程式路由、命名路由以及命名视图等相关知识,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • vue本地打开build后生成的dist文件夹index.html问题

    vue本地打开build后生成的dist文件夹index.html问题

    这篇文章主要介绍了vue本地打开build后生成的dist文件夹index.html问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-09-09
  • 在vue2项目中使用dart-sass的问题及解决方法

    在vue2项目中使用dart-sass的问题及解决方法

    在Vue2项目中,使用dart-sass替代node-sass可以解决安装困难和环境兼容问题,VueCLI3+用户可直接使用,而VueCLI2用户需升级VueCLI和项目,具体方法包括修改package.json依赖并使用.scss文件编写样式,此更改有助于提升项目的开发效率和跨平台兼容性
    2024-09-09
  • springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)

    springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)

    这篇文章主要介绍了springboot+vue+对接支付宝接口+二维码扫描支付(沙箱环境),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Vue封装数字框组件实现流程详解

    Vue封装数字框组件实现流程详解

    这篇文章主要介绍了Vue封装数字框组件实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04

最新评论