倒计时

项目地址

HTML代码

复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>倒计时</title>
        <link rel="stylesheet" type="text/css" href="layui/css/layui.css" />
        <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
    </head>
    <body>
        <table border="0">
            <tr>
                <td>
                    选择时间:
                </td>
                <td>
                    <input type="text" id="date" class="layui-input date" />
                </td>
            </tr>
            <tr>
                <td>
                    倒计时:
                </td>
                <td>
                    <input type="text" id="countDownTime" class="layui-input date" readonly />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <button type="text" id="startCountDown" class="layui-btn opt-btn" data-val="">开始</button>
                    <button type="text" id="stopCountDown" class="layui-btn opt-btn">暂停</button>
                </td>
            </tr>
        </table>
    </body>
</html>
<script type="text/javascript" src="layui/layui.js"></script>
复制代码

CSS代码

复制代码
<style type="text/css">
            table {
                text-align: center;
                margin: auto;
            }

            table tr td {
                padding: 10px 5px;
            }

            .date {
                width: 275px;
                height: 38px;
                text-align: center;
                display: inline-block;
            }

            .opt-btn {
                width: 100px;
            }
        </style>
复制代码

JavaScript代码

复制代码
<script type="text/javascript">
    // 组件
    layui.use('laydate', function() {
        var laydate = layui.laydate;
        laydate.render({
            elem: '#date',
            type: 'datetime',
            value: new Date(),
            min: 0,
            done: function(value) {
                stat = 0;
                // 重新选择时间后清除interval
                if (timer != "") {
                    clearInterval(timer);
                    timer = "";
                    $("#countDownTime").val("");
                }
                $("#startCountDown").attr("data-val", value);
            }
        });
    });

    function countDown(id, value) {
        // 选择的时间
        var endTime = new Date(value);
        // 现在时间
        var nowTime = new Date();
        // 时间差(秒)
        var timeDiff = parseInt((endTime - nowTime) / 1000);
        var days = Math.floor(timeDiff / (24 * 60 * 60));
        var remTime = timeDiff % (24 * 60 * 60);
        var hours = Math.floor(remTime / (60 * 60));
        var remMinutes = remTime % (60 * 60);
        var minutes = Math.floor(remMinutes / 60);
        var seconds = remTime % 60;

        days = days > 9 ? days : "0" + days;
        hours = hours > 9 ? hours : "0" + hours;
        minutes = minutes > 9 ? minutes : "0" + minutes;
        seconds = seconds > 9 ? seconds : "0" + seconds;

        var ct = days + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒";

        $("#" + id).val(ct);
    }

    // 开始倒计时
    // interval
    var timer = "";
    // 按钮状态
    var stat = 0;
    $("#startCountDown").click(function() {
        var value = $("#startCountDown").attr("data-val");
        // 选择的时间
        var endTime = new Date(value);
        // 现在时间
        var nowTime = new Date();
        if (value != "" && endTime>nowTime) {
            if(stat == 0){
                stat = 1;
                timer = setInterval(function() {
                    countDown("countDownTime", value);
                }, 1000);
            }
        } else {
            alert("请选择正确的时间(大于当前时间)!");
        }
    });

    // 暂停倒计时
    $("#stopCountDown").click(function() {
        if(stat == 1){
            stat = 0;
            if (timer != "") {
                clearInterval(timer);
                timer = "";
            }
        }
    });
</script>
复制代码

效果展示:

 

posted @   lightbc  阅读(273)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示