html中倒计时实现

1:通用的执行方式

数据列的渲染方式,这里用的layui

这个方法在其他地方也能用,这里的定时器是dom的方法,也是网上很多案例的写法,比较通用

{
                title: '倒计时', field: 'toTriggerTimeMin', templet: function (d) {
                    //
                    let dtt = d.toTriggerTimeMin;
                    // 设置唯一id
                    let testKey = d.id;
                    if (dtt <= 0) {
                        return `<label  id=${testKey}>已结束</label>`;
                    }
                    //未结束
                    //这一步其实可以先把最开始的时间填充上,根据情况选择是否填充数据
                    let html = `<label id=${testKey} style="color: red;">加载中</label>`;
                    joinTask(testKey, function () {
                        //秒数减少
                        dtt--;
                        //获取时间、赋值
                        let str = formatDateStr(dtt);
                        $('#' + testKey).text(str);
                        if (dtt <= 0) {
                            //倒计时结束,删除任务
                            $('#' + testKey).text("已结束");
                            delTask(testKey);
                        }
                    });
                    return html;
                }
            },

里面的几个核心方法

//1:存储任务的集合
var tasks = new Map();
//3:dom定时器方法(函数,延时时间)
setInterval(function () {
    //循环执行任务集合中全部方法
    for (let key in tasks) {
        tasks[key]();
    }
}, 1000)

//2:添加任务
function joinTask(key, value) {
    if (typeof value === "function") {
        tasks[key] = value;
    }
}

//4:删除任务
function delTask(task) {
    delete tasks[task];
}

// 把秒转换为想要的格式
function formatDateStr(t) {
    //
    let left_day = parseInt(t / (60 * 60 * 24));
    //
    let left_hour = parseInt((t % (60 * 60 * 24)) / (60 * 60));
    if (left_hour < 10) {
        left_hour = "0" + left_hour;
    }
    //
    let left_minute = parseInt((t % 3600) / 60);
    if (left_minute < 10) {
        left_minute = "0" + left_minute;
    }
    //
    let left_second = t % 60;
    if (left_second < 10) {
        left_second = "0" + t % 60;
    }
    return left_day + "" + left_hour + "" + left_minute + "" + left_second + "";
}

 

效果

 

 

2:layui自身方法

如果是layui框架的话,其实可以用它本身的倒计时方法

数据列的写法

{
                title: '倒计时', field: 'scoreDate', templet: function (d) {
                    //这里换了一种写法,这里传过来的是具体的日期,如:2022-01-01 15:30:00
                    let t = d.scoreDate;
                    // 设置唯一的key
                    let key = d.conditionId;
                    if (t <= 0) {
                        return `<label  id=${key}>已结束</label>`;
                    }
                    //未结束
                    let html = `<label id=${key} style="color: red;">加载中</label>`;
                    //调用倒计时方法
                    setCountdown(t,key)
                    return html;
                }
            }

方法:这里的方法是从官网上拿过来的

    // 倒计时
var util = layui.util;

function setCountdown(value, indexId) { let formatDate1 = formatDate(value); let endTime = new Date(formatDate1); // 结束日期 let serverTime = new Date(); // 假设为当前服务器时间,这里采用的是本地时间,实际使用一般是取服务端的 util.countdown(endTime, serverTime, function (date, serverTime, timer) { let str = date[0] + '' + date[1] + '' + date[2] + '' + date[3] + ''; $('#' + indexId).html(str); }); }

效果

 

posted @ 2023-06-20 16:44  鸭猪是的念来过倒  阅读(1099)  评论(0编辑  收藏  举报