当前位置: 首页 > news >正文

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

 

<!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的前面添加0function 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";}// 保存倒计时到LocalStoragewindow.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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零开始手写STL库:Map
  • C++:list类(迭代器)
  • Spring SSM框架--MVC
  • [数据集][目标检测]手钳检测数据集VOC+YOLO格式141张1类别
  • 一:《Python基础语法汇总》— 数据类型与输入输出
  • sql总结
  • C++入门——21特殊的类
  • PostgreSQL下载、安装(Windows 10/11 64位)详细教程【超详细,保姆级教程!!!】
  • python——常见创建型设计模式
  • 仿RabbitMq实现简易消息队列正式篇(路由匹配篇)
  • BFS解决单源最短路问题
  • MySql 高阶二(SQL 性能分析)
  • QT翻金币小游戏(含音频图片文件资源)
  • c#使用Microsoft.Office.Interop.Word提示无法嵌入或操作型“ApplicationClass”。请改用试用的接口。
  • day45-dynamic programming-part12-8.16
  • 【个人向】《HTTP图解》阅后小结
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • docker python 配置
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • go append函数以及写入
  • LeetCode18.四数之和 JavaScript
  • PHP面试之三:MySQL数据库
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue官网教程学习过程中值得记录的一些事情
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从PHP迁移至Golang - 基础篇
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 第十八天-企业应用架构模式-基本模式
  • 多线程事务回滚
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何实现 font-size 的响应式
  • 写代码的正确姿势
  • 你对linux中grep命令知道多少?
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​ubuntu下安装kvm虚拟机
  • #、%和$符号在OGNL表达式中经常出现
  • #{}和${}的区别?
  • #stm32驱动外设模块总结w5500模块
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1)Nginx简介和安装教程
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十六)串口UART
  • (四)进入MySQL 【事务】
  • (转)h264中avc和flv数据的解析
  • .bat文件调用java类的main方法
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net CHARTING图表控件下载地址
  • .net mvc 获取url中controller和action
  • .net 后台导出excel ,word
  • .net 简单实现MD5
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...