效果如图所示
css和html不做解释
js分为有两部分(一、实现右上角的时间变化 二、实现每个列表的倒计时)
一、实现右上角的时间变化
1、使用 setInterval("time()",1000),每隔1秒调用一次time()
该方法比较简单,就是分别获取天、时、秒,然后用拿到该div的id值,用innerHTMl改变text值
function time() {
var vWeek;
vWeek = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var vWeek_s = date.getDay();
document.getElementById("time").innerHTML=vWeek[vWeek_s]+' / '+dateState()+this.addZero(hours) + ':' + this.addZero(minutes) + ':' + this.addZero(seconds);
};
//小于10的拼接上0字符串
function addZero(s){
return s < 10 ? ('0' + s) : s;
}
//判断是上午、下午、晚上
function dateState() {
let date = new Date();
if (date.getHours() >= 6 && date.getHours() < 12) {
return "上午班 "
} else if (date.getHours() >= 12 && date.getHours() < 18) {
return "下午班 "
} else {
return "晚班 "
}
}
二、实现每个列表的倒计时
代码2.0版本
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: user
Date: 2022/9/27
Time: 9:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<script src="/assets/vendor/jquery/js/jquery-3.2.1.min.js"></script>
<title>透析进度</title>
</head>
<style>
.mainpage{
display: flex;
flex-wrap: wrap;
padding: 1%;
background: #010D1B;
}
.header{
display: flex;
width: 100%;
background-image: radial-gradient(circle at 0%, #010D1B ,#0F79A3, #010D1B);
justify-content: center;
position: relative;
height: 50px;
align-items: center;
}
.header-title{
font-size: 29px;
color: #60D3F0;
font-family: PangMenZhengDao-3;
font-weight: 400;
/* line-height: 0px; */
color: #60D3F0;
text-shadow: 0px 3px 6px rgba(0 120 145 0.58);
letter-spacing: 10px;
opacity: 1;
text-align: center;
}
.header-time{
position: absolute;
right: 2%;
display: flex;
font-size: 12px;
font-family: Microsoft YaHei;
font-weight: 400;
color: #B2DFE4;
}
.warp-item{
width: 249px;
height: 58px;
border: solid 2px #0F79A3;
margin: 4px;
padding: 5px;
/* font-weight: bold; */
background-color: #0E2F58;
border-radius: 12px;
font-family: Microsoft YaHei;
color: #fff;
}
.item-top{
height: 27px;
display: flex;
flex-direction: row;
font-size: 15px;
justify-content: space-between;
/* line-height: 25px; */
align-items: center;
}
.item-status{
color: #0F79A3;
}
.item-text{
display: flex;
font-weight: bold;
}
.item-bottom{
height: 20px;
display: flex;
/* line-height: 14px; */
align-items: center;
}
.item-progress{
border-radius: 6px;
text-align: center;
position: relative;
overflow: hidden;
width: 100%;
height: 7px;
background-color: #3C4D6B;
}
.item-progress-bar,
.item-progress-bar-change{
background-color: #1CAFFC;
width: 80%;
height: 5px;
border-radius: 6px;
margin: 1px;
}
.warp-item-off{
width: 249px;
height: 58px;
border: solid 2px #0F79A3;
margin: 4px;
padding: 5px;
/* font-weight: bold; */
border-radius: 12px;
font-family: Microsoft YaHei;
background: #0F79A3;
color: #fff;
}
.item-status-off{
color: #26D08C;
}
.item-time,
.item-time-change{
margin: 5px 7px;
font-size: 13px;
}
.header-time img{
height: 15px;
width: 15px;
margin: 0px 2px;
}
.bottom{
color: #9BA0B6;
font-size: 12px;
font-weight: 400;
background-color: #010D1B;
align-items: center;
display: flex;
justify-content: center;
margin: 0px;
padding: 0px 0px 15px 0px;
}
.item-status{
width: 55px;
}
</style>
<body>
<div id="app">
<div class="header">
<div class="header-title">透析进度</div>
<div class="header-time" >
<img src="../../../assets/image/dialysis_progress/time.png" alt="">
<div id="time"></div>
</div>
</div>
<div class="mainpage">
<%-- <div class="warp-item">--%>
<%-- <div class="item-top">--%>
<%-- <div class="item-text">--%>
<%-- <div class="item-text-place">南二A厅</div>--%>
<%-- <div class="item-text-number">001</div>--%>
<%-- <div class="item-text-name">李二狗</div>--%>
<%-- </div>--%>
<%-- <div class="item-status-off">已下机</div>--%>
<%-- </div>--%>
<%-- <div class="item-bottom">--%>
<%-- <div class="item-progress">--%>
<%-- <div class="item-progress-bar" style="width:30%" > </div>--%>
<%-- </div>--%>
<%-- <div class="item-time">01:21</div>--%>
<%-- </div>--%>
<%-- </div>--%>
<c:forEach items="${result}" var="res" >
<c:if test="${'3' eq res.state}">
<div class="warp-item-off">
<div class="item-top">
<div class="item-text">
<div class="item-text-place">${res.message}</div>
<%--判断是什么透析状态--%>
</div>
<c:if test="${'0' eq res.state}">
<div class="item-status">未称重</div>
</c:if>
<c:if test="${'1' eq res.state}">
<div class="item-status">已称重</div>
</c:if>
<c:if test="${'2' eq res.state}">
<div class="item-status">透析中</div>
</c:if>
<c:if test="${'3' eq res.state}">
<div class="item-status-off">已下机</div>
</c:if>
</div>
<div class="item-bottom">
<c:if test="${'无法统计' ne res.time}">
<div class="item-progress">
<div class="item-progress-bar" style="width:${res.schedule}%"> </div>
</div>
</c:if>
<div class="item-time" >${res.time}</div>
</div>
</div>
</c:if>
<c:if test="${'3' ne res.state}">
<div class="warp-item">
<div class="item-top">
<div class="item-text">
<div class="item-text-place">${res.message}</div>
<%--判断是什么透析状态--%>
</div>
<c:if test="${'0' eq res.state}">
<div class="item-status">未称重</div>
</c:if>
<c:if test="${'1' eq res.state}">
<div class="item-status">已称重</div>
</c:if>
<c:if test="${'2' eq res.state}">
<div class="item-status">透析中</div>
</c:if>
<c:if test="${'3' eq res.state}">
<div class="item-status-off">已下机</div>
</c:if>
</div>
<div class="item-bottom">
<c:if test="${'无法统计' ne res.time}">
<div class="item-progress">
<div class="item-progress-bar" style="width:${res.schedule}%"> </div>
</div>
</c:if>
<div class="item-time" >${res.time}</div>
</div>
</div>
</c:if>
</c:forEach>
</div>
</div>
<div class="bottom">南京医科大学第二附属医院血液净化中心管理系统</div>
</div>
</body>
</html>
<%--<script src="http://code.jquery.com/jquery-latest.js"></script>--%>
<script type="text/javascript">
window.setTimeout(function(){
window.location.reload();
},300000);
function time() {
var vWeek;
vWeek = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var vWeek_s = date.getDay();
document.getElementById("time").innerHTML=vWeek[vWeek_s]+' / '+dateState()+this.addZero(hours) + ':' + this.addZero(minutes) + ':' + this.addZero(seconds);
};
//小于10的拼接上0字符串
function addZero(s){
return s < 10 ? ('0' + s) : s;
}
//判断是上午、下午、晚上
function dateState() {
let date = new Date();
if (date.getHours() >= 6 && date.getHours() < 12) {
return "上午班 "
} else if (date.getHours() >= 12 && date.getHours() < 18) {
return "下午班 "
} else {
return "晚班 "
}
}
setInterval("time()",60000)
// 计算"透析中",进度条和剩余时间
$(document).ready(function(){
window.setInterval("ChangeStrToMinutes()",200);
})
var res=new Array();
var restTimeList=new Array();
for( var timeItem of ${result}){
restTimeList.push(timeItem.time)
}
// var resttimeNumber = new Array()
var refreshTimeLine = document.getElementsByClassName("item-bottom")
var refreshTime = document.getElementsByClassName("item-time")
function ChangeStrToMinutes()
{
res=${result}
for( var index in res) {
if(res[index].state=='2'&&restTimeList[index]!='00:00' ) {
// 计算进度条变化
var minTime = minToHour(restTimeList[index]) - 1
var schedule = (res[index].dialysisOrderTime * 60 - minTime) / (res[index].dialysisOrderTime * 60) * 100 + '%'
refreshTimeLine[index].querySelector(".item-progress-bar").style.width = schedule
// 计算倒数时间变化
refreshTime[index].innerHTML = ChangeHourMinutestr(minTime)
debugger
restTimeList[index]=ChangeHourMinutestr(minTime)
}
}
};
function minToHour(time){
// 小时转换成分钟
if(time!='无法统计'){
var arrminutes = time.split(":");
if (arrminutes.length == 2) {
var minutes = parseInt(arrminutes[0]) * 60 + parseInt(arrminutes[1]);
// restTimeList.push(minutes)
// resttimeNumber.push(minutes)
return minutes
}
else {
return 0;
}
}
};
function ChangeHourMinutestr(str) {
return ((Math.floor(str / 60)).toString().length < 2 ? "0" + (Math.floor(str / 60)).toString() :
(Math.floor(str / 60)).toString()) + ":" + ((str % 60).toString().length < 2 ? "0" + (str % 60).toString() : (str % 60).toString());
}
</script>
代码1.0版本
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: user
Date: 2022/9/27
Time: 9:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>透析进度</title>
</head>
<style>
.mainpage{
display: flex;
flex-wrap: wrap;
padding: 1%;
background: #010D1B;
}
.header{
display: flex;
width: 100%;
background-image: radial-gradient(circle at 0%, #010D1B ,#0F79A3, #010D1B);
justify-content: center;
position: relative;
height: 50px;
align-items: center;
}
.header-title{
font-size: 29px;
color: #60D3F0;
font-family: PangMenZhengDao-3;
font-weight: 400;
/* line-height: 0px; */
color: #60D3F0;
text-shadow: 0px 3px 6px rgba(0 120 145 0.58);
letter-spacing: 10px;
opacity: 1;
text-align: center;
}
.header-time{
position: absolute;
right: 2%;
display: flex;
font-size: 12px;
font-family: Microsoft YaHei;
font-weight: 400;
color: #B2DFE4;
}
.warp-item{
width: 249px;
height: 58px;
border: solid 2px #0F79A3;
margin: 4px;
padding: 5px;
/* font-weight: bold; */
background-color: #0E2F58;
border-radius: 12px;
font-family: Microsoft YaHei;
color: #fff;
}
.item-top{
height: 27px;
display: flex;
flex-direction: row;
font-size: 15px;
justify-content: space-between;
/* line-height: 25px; */
align-items: center;
}
.item-status{
color: #0F79A3;
}
.item-text{
display: flex;
font-weight: bold;
}
.item-bottom{
height: 20px;
display: flex;
/* line-height: 14px; */
align-items: center;
}
.item-progress{
border-radius: 6px;
text-align: center;
position: relative;
overflow: hidden;
width: 100%;
height: 7px;
background-color: #3C4D6B;
}
.item-progress-bar,
.item-progress-bar-change{
background-color: #1CAFFC;
width: 80%;
height: 5px;
border-radius: 6px;
margin: 1px;
}
.warp-item-off{
width: 249px;
height: 58px;
border: solid 2px #0F79A3;
margin: 4px;
padding: 5px;
/* font-weight: bold; */
border-radius: 12px;
font-family: Microsoft YaHei;
background: #0F79A3;
color: #fff;
}
.item-status-off{
color: #26D08C;
}
.item-time,
.item-time-change{
margin: 5px 7px;
font-size: 13px;
}
.header-time img{
height: 15px;
width: 15px;
margin: 0px 2px;
}
.bottom{
color: #9BA0B6;
font-size: 12px;
font-weight: 400;
background-color: #010D1B;
align-items: center;
display: flex;
justify-content: center;
margin: 0px;
padding: 0px 0px 15px 0px;
}
.item-status{
width: 55px;
}
</style>
<body>
<div id="app">
<div class="header">
<div class="header-title">透析进度</div>
<div class="header-time" >
<img src="../../../assets/image/dialysis_progress/time.png" alt="">
<div id="time"></div>
</div>
</div>
<div class="mainpage">
<%-- <div class="warp-item">--%>
<%-- <div class="item-top">--%>
<%-- <div class="item-text">--%>
<%-- <div class="item-text-place">南二A厅</div>--%>
<%-- <div class="item-text-number">001</div>--%>
<%-- <div class="item-text-name">李二狗</div>--%>
<%-- </div>--%>
<%-- <div class="item-status-off">已下机</div>--%>
<%-- </div>--%>
<%-- <div class="item-bottom">--%>
<%-- <div class="item-progress">--%>
<%-- <div class="item-progress-bar" style="width:30%" > </div>--%>
<%-- </div>--%>
<%-- <div class="item-time">01:21</div>--%>
<%-- </div>--%>
<%-- </div>--%>
<c:forEach items="${result}" var="res" >
<c:if test="${'3' eq res.state}">
<div class="warp-item-off">
<div class="item-top">
<div class="item-text">
<div class="item-text-place">${res.message}</div>
<%--判断是什么透析状态--%>
</div>
<c:if test="${'0' eq res.state}">
<div class="item-status">未称重</div>
</c:if>
<c:if test="${'1' eq res.state}">
<div class="item-status">已称重</div>
</c:if>
<c:if test="${'2' eq res.state}">
<div class="item-status">透析中</div>
</c:if>
<c:if test="${'3' eq res.state}">
<div class="item-status-off">已下机</div>
</c:if>
</div>
<div class="item-bottom">
<c:if test="${'无法统计' ne res.time}">
<div class="item-progress">
<div class="item-progress-bar" style="width:${res.schedule}"> </div>
</div>
</c:if>
<div class="item-time" >${res.time}</div>
</div>
</div>
</c:if>
<c:if test="${'3' ne res.state}">
<div class="warp-item">
<div class="item-top">
<div class="item-text">
<div class="item-text-place">${res.message}</div>
<%--判断是什么透析状态--%>
</div>
<c:if test="${'0' eq res.state}">
<div class="item-status">未称重</div>
</c:if>
<c:if test="${'1' eq res.state}">
<div class="item-status">已称重</div>
</c:if>
<c:if test="${'2' eq res.state}">
<div class="item-status">透析中</div>
</c:if>
<c:if test="${'3' eq res.state}">
<div class="item-status-off">已下机</div>
</c:if>
</div>
<div class="item-bottom">
<c:if test="${'无法统计' ne res.time}">
<div class="item-progress">
<div class="item-progress-bar" style="width:${res.schedule}"> </div>
</div>
</c:if>
<div class="item-time" >${res.time}</div>
</div>
</div>
</c:if>
</c:forEach>
</div>
</div>
<div class="bottom">南京医科大学第二附属医院血液净化中心管理系统</div>
</div>
</body>
</html>
<script type="text/javascript">
function time() {
var vWeek;
vWeek = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var vWeek_s = date.getDay();
document.getElementById("time").innerHTML=vWeek[vWeek_s]+' / '+dateState()+this.addZero(hours) + ':' + this.addZero(minutes) + ':' + this.addZero(seconds);
};
//小于10的拼接上0字符串
function addZero(s){
return s < 10 ? ('0' + s) : s;
}
//判断是上午、下午、晚上
function dateState() {
let date = new Date();
if (date.getHours() >= 6 && date.getHours() < 12) {
return "上午班 "
} else if (date.getHours() >= 12 && date.getHours() < 18) {
return "下午班 "
} else {
return "晚班 "
}
}
setInterval("time()",1000)
var x=10;
var timeChangeList=new Array();
// var bedId=new Array();
$(document).ready(function(){
ChangeStrToMinutes()
})
var res=new Array();
var restTimeList=new Array();
var resttimeNumber = new Array()
function ChangeStrToMinutes()
{
//1.得到小时
res=${result}
for( item in res){
console.log('时间为',res[item].time)
// 2.小时转换成分钟
if(res[item].time!='无法统计'){
var arrminutes = res[item].time.split(":");
if (arrminutes.length == 2) {
var minutes = parseInt(arrminutes[0]) * 60 + parseInt(arrminutes[1]);
restTimeList.push(minutes)
resttimeNumber.push(minutes)
}
else {
return 0;
}
}
}
refreshTimeSchedule(restTimeList)
};
//3.计算剩余时间
var refreshTimeLine = document.getElementsByClassName("item-progress-bar")
var refreshTime = document.getElementsByClassName("item-time")
//改变进度条
function refreshTimeSchedule(restTimeList) {
var TimeList = new Array()
TimeList=restTimeList
for (item in TimeList) {
if (TimeList[item] != '0') {
TimeList[item]= TimeList[item]+1
var resttimeMath = (TimeList[item] / 260) * 100
resttimeMath= Math.floor(resttimeMath * 100) / 100;
refreshTimeLine[item].style.width =resttimeMath+"%"
}
}
console.log(refreshTime.length)
debugger
changeResttimeNumber(resttimeNumber)
}
setInterval("refreshTimeSchedule(restTimeList)",3000)
//改变时间显示
function changeResttimeNumber(resttimeNumber){
for( item2 in resttimeNumber ){
if(resttimeNumber[item2]!='0') {
resttimeNumber[item2]-=1;
console.log(resttimeNumber[item2])
if (refreshTime[item2].innerHTML == '00:00'||refreshTime[item2].innerHTML == "无法统计") {
}else {
var changeResttime = ChangeHourMinutestr(resttimeNumber[item2])
debugger
refreshTime[item2].innerHTML = changeResttime
console.log(changeResttime)
}
}
}
}
function ChangeHourMinutestr(str) {
return ((Math.floor(str / 60)).toString().length < 2 ? "0" + (Math.floor(str / 60)).toString() :
(Math.floor(str / 60)).toString()) + ":" + ((str % 60).toString().length < 2 ? "0" + (str % 60).toString() : (str % 60).toString());
}
</script>