倒计时:可添加可删除的倒计时函数

news2024/9/22 23:37:40

 

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>倒计时</title>
</head>

<body>
    <!-- 倒计时 -->
    <div id="countdownContainer"></div>
</body>
<script>
    /* 添加倒计时函数*/
    (function () {
        // 初始化倒计时功能
        function initCountdown() {
            initUI();
            updateCountdowns();
            setInterval(updateCountdowns, 1000);
        }

        // 创建初始用户界面
        function initUI() {
            var container = document.createElement('div');
            container.id = 'countdownContainer';
            document.body.appendChild(container);

            var addButton = document.createElement("button");
            addButton.innerHTML = "添加倒计时";
            addButton.onclick = addCountdown;
            document.body.appendChild(addButton);
        }

        // 更新倒计时显示
        function updateCountdowns() {
            var container = document.getElementById("countdownContainer");
            container.innerHTML = "";
            var countdowns = getCountdowns();
            countdowns.forEach(function (countdown, index) {
                var div = document.createElement("div");
                div.innerHTML = `<strong>${countdown.title}</strong>: ${getTimeRemaining(countdown.date)} <button onclick="window.deleteCountdown(${index})">删除</button>`;
                container.appendChild(div);
            });
        }

        // 计算剩余时间
        function getTimeRemaining(endDate) {
            var total = Date.parse(endDate) - Date.parse(new Date());
            var seconds = Math.floor((total / 1000) % 60);
            var minutes = Math.floor((total / 1000 / 60) % 60);
            var hours = Math.floor((total / (1000 * 60 * 60)) % 24);
            var days = Math.floor(total / (1000 * 60 * 60 * 24));
            return `${days}天 ${padZero(hours)}小时 ${padZero(minutes)}分钟 ${padZero(seconds)}秒`;
        }

        // 为数字小于10的前面添加0
        function padZero(num) {
            return num < 10 ? `0${num}` : num;
        }

        // 添加新的倒计时
        function addCountdown() {
            var formContainer = document.createElement("div");
            formContainer.id = "countdownForm";
            formContainer.innerHTML = `
                <input type="text" id="countdownTitle" placeholder="提示信息">
                <input type="datetime-local" id="countdownDate">
                <button onclick="window.saveCountdown()">保存倒计时</button>
                <button onclick="window.cancelCountdown()">取消</button>
            `;
            document.body.appendChild(formContainer);
            formContainer.style.display = "block";
        }

        // 保存倒计时到LocalStorage
        window.saveCountdown = function() {
            var title = document.getElementById("countdownTitle").value;
            var date = document.getElementById("countdownDate").value;
            if (title && date) {
                var countdowns = getCountdowns();
                countdowns.push({ title: title, date: date });
                localStorage.setItem("countdowns", JSON.stringify(countdowns));
                document.getElementById("countdownForm").remove();
                updateCountdowns();
            }
        }

        // 删除指定的倒计时
        window.deleteCountdown = function(index) {
            var countdowns = getCountdowns();
            countdowns.splice(index, 1);
            localStorage.setItem("countdowns", JSON.stringify(countdowns));
            updateCountdowns();
        }

        // 取消倒计时的添加
        window.cancelCountdown = function() {
            document.getElementById("countdownForm").remove();
        }

        // 从LocalStorage获取倒计时
        function getCountdowns() {
            return JSON.parse(localStorage.getItem("countdowns")) || [];
        }

        // 启动倒计时功能
        window.onload = initCountdown;
    })();
    /* 添加倒计时函数 结束*/
</script>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于医疗器械维修行业的一些思考

在当今医疗体系中&#xff0c;医疗器械维修行业扮演着不可或缺的角色。作为一名长期关注这一领域的人士&#xff0c;我对其有着一些个人的看法。 首先&#xff0c;医疗器械维修行业的重要性不言而喻。先进的医疗器械是现代医疗诊断和治疗的重要工具&#xff0c;而确保这些设备…

计算机组成原理(3):存储系统

1 存储器概述 主存储器其实就是内存&#xff01; 1.1 存储器的层次结构 ​ 存储器的三大评判指标&#xff1a;速度、容量、价格 ​ 使用任意一种存储器&#xff0c;都无法满足用户对存储器 高速、大容量、低价格 的需求&#xff0c;所以采用 多级结构 形成对应的 “存储体系“。…

从零开始学习网络安全渗透测试之信息收集篇——(二)WEB前端JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

0、什么是JS渗透测试? 在Javascript中也存在变量和函数&#xff0c;当存在可控变量及函数调用即可参数漏洞JS开发的WEB应用和PHP&#xff0c;JAVA,NET等区别在于即没有源代码&#xff0c;也可以通过浏览器的查看源代码获取真实的点。获取URL&#xff0c;获取JS敏感信息&#…

mkv怎么改成mp4?3种mkv转mp4格式方法的介绍

mkv怎么改成mp4&#xff1f;将MKV格式视频转换为MP4格式&#xff0c;能显著提升兼容性&#xff0c;让视频在更多设备、平台上流畅播放。无论是智能手机、平板电脑、智能电视还是网页浏览器&#xff0c;MP4格式都具备广泛的支持&#xff0c;从而扩大视频的传播范围和受众群体。这…

Android Studio open 一个项目覆盖了当前项目

在新电脑上&#xff0c;想在Android studio 同时打开几个项目,出现了打开新项目会覆盖当前项目的问题&#xff0c; 修复方法如下&#xff1a; File >Settings>System Settings> 按需选择即可&#xff0c;如Ask

建造者模式 和 外观模式

这两种模式很像, 都是将一个复杂的流程统一用一个方法进行包装, 方便外界使用. 建造者模式更像是 外观模式的一种特里, 只对一个类的复杂初始化流程进行包装 建造者模式 简介: 就是一个类的构造方法可能很复杂, 由于系统的限制等原因, 可能很多初始化逻辑不能放在构造函数里,…

微信答题小程序产品研发-数据库与数据表设计

设计答题小程序的数据库和数据表时&#xff0c;我充分考虑了数据的完整性、一致性、安全性和查询效率。 然后&#xff0c;我整理一份关于答题小程序的数据库设计方案。 1. 数据库设计原则 &#xff08;1&#xff09;规范化&#xff1a;确保数据表的设计遵循数据库规范化原则&…

想要在本地生活服务平台赚钱?赶紧了解这些秘籍!

当前&#xff0c;由于本地生活的市场前景不断展现和各大官方平台在本地生活服务商申请、考核方面等多方面要求的持续收紧&#xff0c;本地生活服务平台的搭建逐渐成为了许多创业者首选入局途径&#xff0c;与之相关的本地生活服务平台的盈利点更是因此成为了他们最关心的话题。…

揭秘五大无线领夹麦克风常见智商税:选购时务必多注意!

​随着内容创作和自媒体的兴起&#xff0c;越来越多的人开始关注音频设备的选择&#xff0c;尤其是对无线领夹麦克风的需求日益增长。我们了解到&#xff0c;不少用户在选择过程中会遇到困难&#xff0c;所以接下来要为大家揭晓的是目前无线领夹麦克风行业中比较常见的几个智商…

HIEE451116R0001控制器可议价

HIEE451116R0001控制器可议价 HIEE451116R0001控制器可议价 HIEE451116R0001控制器可议价 HIEE451116R0001控制模块接线图 HIEE451116R0001控制模块电路图 HIEE451116R0001控制模块中文手册 HIEE451116R0001自动化控制是一种通过利用控制理论、仪器仪表、计算机和其他信息…

气膜馆:运动场上的清凉新选择—轻空间

随着气膜结构技术的不断进步&#xff0c;越来越多的运动场馆采用了气膜结构&#xff0c;不仅因为其灵活性和可移动性&#xff0c;还因为它能为运动员和观众提供一个舒适的运动环境。许多人关心在气膜场馆中运动是否会感到闷热&#xff0c;然而事实正相反&#xff0c;现代气膜场…

如何用Java SpringBoot+Vue搭建七彩云南文化旅游网站?

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Lesson 71 He‘s awful!

Lesson 71 He’s awful! 词汇 awful a. 让人讨厌的&#xff0c;坏的&#xff0c;令人恶心的 相关&#xff1a;bad a. 坏的    terrible a. 糟糕的 例句&#xff1a;他是个让人恶心的男孩。    He is an awful boy.    这本书很差。    This book is terrible. t…

书生大模型实战营-进阶关卡-2-Lagent 自定义你的 Agent 智能体

输入&#xff1a;帮我搜索一下 MindSearch 添加自定义自己的智能体 导入相关包 输入&#xff1a;请帮我生成一幅水墨风格的杭州西湖 效果还可以。

Java项目集成RocketMQ

文章目录 1.调整MQ的配置1.进入bin目录2.关闭broker和namesrv3.查看进程确认关闭4.编辑配置文件broker.conf&#xff0c;配置brokerIP15.开放端口109116.重新启动1.进入bin目录2.启动mqnamesrv和mqbroker1.启动 NameServer 并将输出重定向到 mqnamesrv.log2.**启动 Broker 并将…

PLC常用知识框架V1.0

在工控领域&#xff0c;PLC程序作为软件控制核心&#xff0c;地位很重要&#xff0c;但阅读理解程序&#xff0c;也是一个困难的事。 常在网上看到互联网行业的程序员吐槽祖传代码&#xff0c;其实PLC程序也差不多&#xff0c;由于PLC程序受时间&#xff0c;客户需求&#xff…

高云代理商| 一文看懂FPGA芯片选型!

一、FPGA简介&#xff1a; FPGA诞生于1984年&#xff0c;是一种特殊的逻辑芯片&#xff0c;属于半定制化、可编程芯片。它允许用户可以随时定义芯片的硬件功能。通过开放芯片内部的逻辑块、连线、I/O 等资源给用户配置&#xff0c;使得同一片 FPGA 既可以在 5G 的基站实现信道…

监控电脑屏幕的软件叫什么?6款超值的电脑屏幕监控软件推荐!

数字化转型的大背景下&#xff0c;企业对于员工的工作效率和行为规范提出了更高的要求。 为了确保员工的工作效率以及保护公司的数据安全&#xff0c;电脑屏幕监控软件逐渐成为企业管理的重要工具之一。 本文将为大家介绍五款超值的电脑屏幕监控软件&#xff0c;帮助企业更好地…

Linux 离线安装docker和docker-compose

前言 公司有 docker 和 docker-compose 离线包安装部署的需求&#xff0c;本文应运而生撰写时间&#xff1a;2024-06-07&#xff08;初稿&#xff09; 1 应用版本 docker&#xff1a;20.10.7, build f0df350docker-compose&#xff1a;1.25.1 2 物料准备 服务器账号/密码d…

即插即用,效率远超ControlNet!贾佳亚团队重磅开源ControlNeXt:超强图像视频生成方法

文章链接&#xff1a;https://arxiv.org/pdf/2408.06070 git链接&#xff1a;https://github.com/dvlab-research/ControlNeXt 项目链接&#xff1a;https://pbihao.github.io/projects/controlnext/index.html 亮点直击 提出了ControlNeXt&#xff0c;这是一种强大且高效的图像…