js+jsp页面,用定时器实现多个倒计时

效果如图所示

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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值