vue8小时带刻度的时间轴,根据当前时间实时定位
效果图:
需求:
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;
}
}
}
***如有转载请注明出处!!!
vue8小时带刻度的时间轴,根据当前时间实时定位的更多相关文章
- 使用canvas编写时间轴插件
使用canvas编写时间轴插件 背景 项目中有一个视频广场的功能,需要一个时间轴类似视频播放中进度条功能一样显示录像情况,并且可以点击.拖动.放大缩小展示时间轴,获取到时间轴的某个时间.原来的时间轴是 ...
- extjs 4 chart 时间轴格式的处理
var dayStore = Ext.create('Ext.data.JsonStore', { fields: [{ name: 'name', type: 'date', dateFormat: ...
- 请教DotNetBar控件中的CalendarView控件如何拖动当前的时间轴
本人想拖动那个当前的时间轴或者让时间轴变动,因为那个时间轴默认的是当前时间.(就是那个黄色的线)
- Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果
Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果 在一个项目中,用到了时间轴展示产品的开发进度,为了更好用户体验,想到了Facebook的timeline效果, 搜了一 ...
- SharePoint 中时间轴 Timeline的实现
客户需要在OA中实现每日动态功能,能够记录每一位员工的每天的工作动态,我很快想到了时间轴,因为时间轴能很直观的现实员工每一刻的动态.就像Facebook的Timeline效果(点击查看). 尝试着搜索 ...
- Android 时间轴的实现
时间轴 时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户带来一种更加直观的体验.京东和淘宝的物流顺序就是一个时间轴(如图),想必大家都不陌生. 时间轴的初探 初次见到这种UI,感觉整个布局 ...
- jQuery时间轴
常见的时间轴导航 横向时间轴
- 推荐5款实用的jQuery时间轴插件
1.使用CSS3和jQuery制作的水平时间轴 这是一个可以在PC和移动端表现非常棒的水平时间轴,它由上部水平滑块和下部时间点对应的内容区块,点击时间轴上的时间点,下部内容会滑动到对应的内容区块.使用 ...
- JFreeChart时间轴固定24小时每天刷新
Timeseries时间轴,设置x轴固定长度24小时 xAxis.setFixedAutoRange(3600000 * 2D), 再画出当天24点这一点 Date day = new Date(); ...
- 基于jquery带时间轴的图片轮播切换代码
基于jquery图片标题随小圆点放大切换.这是是一款带时间轴的图片轮播切换代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="decoroll2 ...
随机推荐
- QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo
前言 使用QGis的目的是进行二次开发,或者说是融入我们的应用(无人车.无人船.无人机),本片描述搭建QGis二次基础开发环境,由于实在是太长了,进行了分篇: 上半部分:主要是安装好后,使用QtC ...
- [快速阅读六] 统计内存数据中二进制1的个数(SSE指令集优化版).
关于这个问题,网络上讨论的很多,可以找到大量的资料,我觉得就就是下面这一篇讲的最好,也非常的全面: 统计无符号整数二进制中 1 的个数(Hamming Weight) 在指令集不参与 ...
- 拼多多面试:Netty如何解决粘包问题?
粘包和拆包问题也叫做粘包和半包问题,它是指在数据传输时,接收方未能正常读取到一条完整数据的情况(只读取了部分数据,或多读取到了另一条数据的情况)就叫做粘包或拆包问题. 从严格意义上来说,粘包问题和拆包 ...
- 绘图与可视化--matplotlib API入门
matplotlib API函数都位于matplotlib.pyplot模块中. 本节代码中引入的约定为:import matplotlib.pyplot as plt 另外,numpy库也会用到,约 ...
- CF914C
problem & blog 数位 dp 模板题. 经过一次操作,可以把 \(n\) 变成一个小于 \(10^3\) 的数. 所以我们可以把所有小于 \(10^3\) 的数操作的次数全部处理出 ...
- Ansible-playbook剧本进阶
剧本高级特性篇 循环 在写 playbook 的时候发现了很多 task 都要重复引用某个相同的模块,比如一次启动10个服务,或者一次拷贝10个文件,如果按照传统的写法最少要写10次,这样会显得 pl ...
- Selenium模块的使用(二)
selenium处理iframe - 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id) - 动作链(拖动):from selenium.webdriver i ...
- Vue学习:1.V标签综合1
认识V标签 目录 认识V标签 v-text: v-html: v-bind (缩写为 :): v-if / v-else / v-else-if: v-show: v-for: v-model: Vu ...
- 将html页面转成pdf下载保存(html2canvas + jspdf或者Print调出打印功能导出pdf)
方案1:html2canvas + jspdf (缺点:清晰度不高) 安装插件: 亲测可用 yarn add html2canvas yarn add jspdf import html2canvas ...
- elasticsearch6.8 ik分词器需安装
elasticsearch6.8 ik分词器需安装order_info_es/_analyze POST{ "analyzer": "ik_max_word" ...