有这么一张图,如下,有没有想起它是什么呢?

遇到实际问题:

比如值班人员具体值班时间显示,领导说,我要很直接的看出,哪些同学在哪个时间段的值班状态。 嗯是的,就是这么一句话。需求也就是这么一句话,剩下的自己发挥。

思考:

1.值班时间是一天24小时,不同的人轮流换班工作,也就是在这一天里,在某个时间段,人员是流动的。--24小时 怎么显示?

2.要知道,在某个时间段里,哪些人是在线的,哪些人是不在线的。-- 做上线和不在线的区分

3.对于一个人,他可以频繁的上线、下线,要把这些时间段显示出来,这个数据可能蛮多的。--假设上线和下线的时间戳都有了,放在数组里,要遍历这些数组,才能显示他的实时状态

4.怎样在对应的时间段,匹配住值班人的状态

...

做法:

1、

思路:

所有人都在table里,用table显示所有数据,一个人一个tr,一个tr 里有24个td,分别对应的是24个小时,因为时间显示是 0-23 点,刚好对应的td 的index,这样我知道他是几点上线和几点下线,就把对应的index  标注(添加class 样式);时间段用thead 显示,0-23

具体实现:

遍历tr 下的td,同时遍历该人的上线下线的时间组,index 和 时间点的小时数相等时,标注class (7-9 怎么显示?7和9 是对应的index 可以标注,中间的8 怎么显示?这里还需要做一个遍历,两个时间点相差1 就要遍历,把中心的index 也标注) ,这样时间段和工作人的时间段匹配上了。

问题:

思路简单,容易实现,但是精度有问题,为1个小时,这样就无法显示是在那个小时的哪一分钟的状态。

做法

2、

思路:

从人一天24小时的时间入手,他24小时的所有分钟怎么分配的。这样以分钟为单位,将一天分为 24*60 = 1440 份,一份就为前端显示的一个像素。只要在这个1440 的时间条上标注他每分钟的的状态就完美实现了。

具体做法:

采用进度条的想法。红色是他下线的时间段,绿色是他上线的时间段。绿色出现的位置和它的长度,分别是他此刻的时间(转化为分钟)距离左边的偏移量和 在线的时长。

基本思想就是这个,下面是具体的做法:

因为 后端的数据还没有调过来,所以现在easy-mock 上模拟了一个这个一个json 的数据,当然这个json 是理想化的数据,不考虑错误的情况。数据格式如下,我们要调用这个接口,显示我们的数据。所有时间都是时间戳,所有在取数据显示的时候,是需要处理成我们想要的格式的。

显示进度条 dom

对应核心的css

js:

(这里我采用了es6的语法,es5的语法也是可以的,这里采用,一是需要对es6 多多练习,二是看中了es6 拼接字符串的便利)

原谅我这里声明了好多变量,也是在边写边思考这些变量的,这里是在开始就声明了的,下面是很多的循环,如果在循环体內声明,那么必将导致声明过多的问题,先声明,下面用的就是引用了,不必开辟那么多的空间。做了简单的判断,如果数据里的在线时间组有的话 就遍历。

具体逻辑如下:

以上就是核心的东西:

关于时间轴的排布,我是用了比较搓的写法,写了24个li ,用了flex,将他们平均分布,当然长度是1440px 和进度条是一致的 这样就对齐了。

下面还有一个小操作,就是党鼠标hover 到绿色边缘的时候,会显示具体的时间

这里用了 伪类的 content:attr(data-start);

这里得注意,不能显示 display: none; 然后 block, 二是 opacity:0; hover的时候 办成 opacity: 1;

补充:

这时候要是返回的接口数据变成这个样子了:

没有标准的 一个上下线的数组了,而且还有乱数据,比如两个上线在一起,这个数据该怎么处理呢?

上面的就是把所有的上下的时间点进行打点,列出所有的上下时间刻,dom 形成是这样的:

接下来的就是对这些dom 进行处理:width 是后面的操作做的,这里一起截图了

遍历所有的开始点,然后取出它后面的结束点,比较两个时间点,折换成的宽度

这里的搓:

先渲染好dom,然后在遍历dom,找到dom上的规律,再做操作。这样的话,就是渲染一遍,遍历一遍,在一个相同对象上就是重复了两边。头疼ing.....

目前还没找到合适的方法来处理这样的数据,如果您有好的做法,欢迎和我交流。此处欢迎的掌声响起来。。。

结束语:以上是我个人的一些想法,当然还有很多考录不周,想法不妥之处,各位如果还有更好的方法,欢迎和我一起交流,一起成长进步麦!

献上今天顿的玉米土豆排骨汤,吃完心情超赞,然后就写这个blog.

关于值班表的前端显示相关推荐

  1. c语言switch写值班表,如何用asp编写按周轮换的值班表?例,1月份的值班领导有4位,怎样写可以让4位领导的名字自动到时间显示...

    如何用asp编写按周轮换的值班表?例,1月份的值班领导有4位,怎样写可以让4位领导的名字自动到时间显示以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容 ...

  2. 建站四部曲之前端显示篇(React+上线)

    本系列分为四篇: 建站四部曲之后端接口篇(SpringBoot+上线) 建站四部曲之Python数据爬虫篇(selenium) 建站四部曲之前端显示篇(React+上线) 建站四部曲之移动端篇(And ...

  3. 解决SQL Server 2005数据库中datetime时间字段在前端显示时分秒的问题

    SQL Server 2005中时间类型datetime的格式是"年月日时分秒",直接读出来该字段,为了不让它在前端显示"时分秒"若是显示在dataGridVi ...

  4. php生成值班表,EXCEL表制作自动排列值班表【excel值班表表格制作教程】

    怎么用excel排值班表 方法/步骤 1 制作值班式 2 在单 F2中输入:=TODAY(),单元格格示如图 合A1-C1,在单元格 中输入:=TODAY(),单元格格式显示如图 在I-N,栏中创建值 ...

  5. SharePoint 2007 制作值班表

    背景:公司有了新项目,其中有一块是值班表,简单地说,就是客户需要安排值班,希望把所有的值班安排好,输入到网站中,然后每天发布出来,方便大家看:一开始看到需求,觉得应该用程序去实现,后来想想,其实挺简单 ...

  6. jpeg二进制数据转base64后在前端显示

    需求:前端从后端获取图片. 背景:后端数据均保存在硬盘里,从硬盘取出后的Jpeg图片,二进制数据传输给前端显示图片 直接二进制传输,中间层需要兼容,想着直接转base64字符串,js刚好可以直接显示图 ...

  7. 在学校表中分别显示各个学校的教师和学生人数,查询总数

    实现效果: 在学校表中分别显示各个学校的教师和学生人数 在学校的Mapper.xml文件中写上sql查询语句 Sql语句 select a.*, (select count(*) from teach ...

  8. .NET MVC+ EF+LINQ 多表联查VIEW显示列表

    1.VIEW 页面显示代码 <link href="~/Content/bootstrap.css" rel="stylesheet" />< ...

  9. 将您的窗口最前端显示

    很多时候,我们用电脑同时并非只做一件事,像我就经常一边看视频,一边看网上的其它一些信息或者整理电脑上的东西之类的.只要这两者不是十分冲突的就行.以前都用KMPlayer看视频,它本身提供有前端显示的功 ...

最新文章

  1. 用asp.net实现的把本文推荐给好友功能
  2. 用c实现跨平台异常捕获机制
  3. 在python中print表示的数据类型是_python之数据类型
  4. ESB学习笔记(Spring Integration实战)
  5. linux jenkins部署之路之,ftp部署怎么匿名还好用咋解决思密达
  6. hadoop+海量数据面试题汇总(一)
  7. CopyQq program山寨QQ项目
  8. ASDM的网管的环境搭建
  9. 智能远程监督系统解决方案
  10. 51单片机自学--PWM波占空比程序解释
  11. 电脑如何控制点击android手机,安卓手机怎么控制电脑?红米手机远程控制操作电脑方法...
  12. 谷歌大脑创始成员辞职,他也和Jeff Dean闹掰了
  13. Kinect2.0-Python调用-PyKinect2
  14. 我的世界服务器无限铁傀儡,我的世界刷铁教程 铁傀儡无限刷铁攻略
  15. redis安装+客户端
  16. python类型转换方法_详解python中的类型转换方法
  17. 揭秘数字资产行业隐藏的17家国外机构大牛
  18. 在python中print表示的数据类型是_【Python连载】那些必须掌握的Python数据类型
  19. 前端逼死强迫症之css续集
  20. Anaconda3镜像源修改

热门文章

  1. 【CyberSecurityLearning 54】扫描技术+口令破解
  2. 还在抱怨数据结构难? 一文带你搞懂如何AC算法题(2022版)
  3. Pycharm 图像分辨率调整 学习笔记
  4. unix环境高级编程----进程控制fock()函数
  5. 怎么在html文件中写css文件,html头文件中css怎么写?
  6. Android源码编译流程及所需的编译环境
  7. bundle initial exceeded maximum budget. Budget 1.00 MB was not met by 642.91 kB with a total of 1.63
  8. asp后缀的文件如何运行
  9. 丢失的拜占庭将军问题之谜
  10. ORACLE:子查询