news 2026/7/19 9:48:05

向打工搬砖人致敬!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
向打工搬砖人致敬!

向打工搬砖人致敬

996是打工人的归宿。

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>每日搬砖倒计时</title> <link href="https://fonts.googleapis.com/css2?family=Merriweather:wght@300;400;700&family=Noto+Sans+SC:wght@300;400;700&display=swap" rel="stylesheet"> <style> * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; font-family: 'Noto Sans SC', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background: linear-gradient(180deg, #f7f3ee 0%, #efe8df 100%); color: #38302a; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; display: flex; align-items: center; justify-content: center; padding: 48px 20px; position: relative; overflow: hidden; } /* 彩色氛围层(模糊发光) */ .ambience { position: absolute; inset: 0; z-index: 1; pointer-events: none; mix-blend-mode: screen; opacity: 0.95; } .ambience .blob { position: absolute; border-radius: 50%; filter: blur(80px); transform: translate3d(0,0,0); opacity: 0.55; } .ambience .b1 { width: clamp(220px, 28vw, 520px); height: clamp(220px, 28vw, 520px); left: -12%; top: 6%; background: radial-gradient(circle at 30% 30%, rgba(255,140,120,0.95), rgba(255,90,110,0.65) 40%, rgba(255,90,110,0.0) 70%); animation: blobMove1 12s ease-in-out infinite; } .ambience .b2 { width: clamp(180px, 22vw, 420px); height: clamp(180px, 22vw, 420px); right: -8%; top: 18%; background: radial-gradient(circle at 20% 20%, rgba(120,180,255,0.9), rgba(160,120,255,0.6) 45%, rgba(160,120,255,0.0) 75%); animation: blobMove2 14s ease-in-out infinite; } .ambience .b3 { width: clamp(260px, 34vw, 680px); height: clamp(260px, 34vw, 680px); left: 10%; bottom: -18%; background: radial-gradient(circle at 70% 30%, rgba(120,255,190,0.9), rgba(90,200,170,0.55) 40%, rgba(90,200,170,0.0) 75%); animation: blobMove3 18s ease-in-out infinite; } @keyframes blobMove1 { 0% { transform: translateY(0) scale(1) rotate(0deg); } 50% { transform: translateY(-18px) scale(1.06) rotate(6deg); } 100% { transform: translateY(0) scale(1) rotate(0deg); } } @keyframes blobMove2 { 0% { transform: translateY(0) scale(1) rotate(0deg); } 50% { transform: translateY(22px) scale(1.05) rotate(-5deg); } 100% { transform: translateY(0) scale(1) rotate(0deg); } } @keyframes blobMove3 { 0% { transform: translateY(0) scale(1) rotate(0deg); } 50% { transform: translateY(-28px) scale(1.08) rotate(3deg); } 100% { transform: translateY(0) scale(1) rotate(0deg); } } .container { position: relative; width: 100%; max-width: 980px; z-index: 2; } .card { background: linear-gradient(180deg, rgba(255,255,255,0.92), rgba(250,245,240,0.9)); border-radius: 14px; padding: 18px 26px; margin-bottom: 18px; box-shadow: 0 10px 30px rgba(51,40,30,0.06); border: 1px solid rgba(56,48,42,0.06); transform: translateY(6px); animation: cardIn 600ms ease both; } @keyframes cardIn { from { opacity: 0; transform: translateY(18px) scale(0.995); } to { opacity: 1; transform: translateY(6px) scale(1); } } .header { text-align: center; padding: 22px 24px; background: transparent; border-bottom: 1px solid rgba(56,48,42,0.04); } .header-title { font-family: 'Merriweather', 'Noto Sans SC', serif; font-size: clamp(20px, 2.6vw, 30px); font-weight: 700; color: #372d24; letter-spacing: 0.4px; margin-bottom: 6px; } .header-sub { font-size: 13px; color: #7d6f5b; } .date { margin: 0 auto; width: 100%; color: #6b5f50; font-weight: 600; font-size: clamp(13px, 1.2vw, 15px); text-align: center; opacity: 0.95; } #times { margin: 8px auto; width: 100%; font-size: clamp(36px, 8vw, 72px); font-weight: 700; text-align: center; line-height: 1; font-family: 'Merriweather', 'Noto Sans SC', serif; background: linear-gradient(90deg, #ff9a76, #ff5fb8 25%, #7a9bff 60%, #44d7b6 100%); background-size: 200% 200%; -webkit-background-clip: text; -webkit-text-fill-color: transparent; animation: gradientShift 6s linear infinite, floatText 4s ease-in-out infinite; text-shadow: 0 6px 18px rgba(68,55,44,0.08); } @keyframes gradientShift { 0%{ background-position: 0% 50%; } 50%{ background-position: 100% 50%; } 100%{ background-position: 0% 50%; } } @keyframes floatText { 0% { transform: translateY(0); } 50% { transform: translateY(-6px); } 100% { transform: translateY(0); } } #WorkFullYearDay { margin: 0 auto; width: 100%; color: #6b5f50; font-size: clamp(13px, 1.1vw, 15px); text-align: center; font-weight: 600; } .card.small { padding: 12px 20px; } @media (max-width: 720px) { #times { font-size: clamp(28px, 10vw, 40px); } .header-title { font-size: 18px; } } @media (max-width: 360px) { #times { font-size: clamp(24px, 12vw, 30px); } } @media (prefers-reduced-motion: reduce) { .ambience .blob, #times, .card { animation: none !important; transition: none !important; } } </style> <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script> <!-- <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.7.0.min.js"></script> --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.countdown/2.2.0/jquery.countdown.min.js"></script> </head> <body> <div class="ambience" aria-hidden="true"> <span class="blob b1"></span> <span class="blob b2"></span> <span class="blob b3"></span> </div> <div class="container"> <header class="header card" role="banner"> <div class="header-title">每日搬砖倒计时</div> <div class="header-sub">努力工作,健康生活!</div> </header> <div class="card"> <div class="date"></div> </div> <div class="card times-card"> <div id="times"></div> </div> <div class="card small"> <div id="WorkFullYearDay"></div> </div> </div> <script> var jData_holiday = null; var holiday_name = null; var gloable_year = new Date().getFullYear(); var gloable_month = new Date().getMonth() + 1; var gloable_day = new Date().getDate(); function sendGetRequestXMLHttpRequest(url) { var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { dealJsonData(xhr.responseText); } }; xhr.send(); } function dealJsonData(jsonData) { if (jsonData == undefined) { return null; } jData_holiday = JSON.parse(jsonData).holiday; } function isHoliday(cur_month, cur_day) { if (jData_holiday == null) { return false; } month_day = (cur_month < 10 ? "0" + cur_month : cur_month) + "-" + (cur_day < 10 ? "0" + cur_day : cur_day); if (month_day in jData_holiday) { holiday_name = jData_holiday[month_day].name; isHolidays = jData_holiday[month_day].holiday; return isHolidays; } return false; } function isBuBan(cur_month, cur_day) { if (jData_holiday == null) { return false; } month_day = (cur_month < 10 ? "0" + cur_month : cur_month) + "-" + (cur_day < 10 ? "0" + cur_day : cur_day); buban = false; if (month_day in jData_holiday) { holiday_name = jData_holiday[month_day].name; isHolidays = jData_holiday[month_day].holiday; buban = holiday_name.indexOf("补班") !== -1 ? true : false; } return buban; } function workingToHours(hours, minutes, endDate, endHours) { if (hours < 9 || hours >= endHours) { $("#times").html("现在是休息时间!!!"); } else if (hours >= 12 && hours <= 13) { if ((hours == 12 && minutes >= 0) || (hours == 13 && minutes <= 30)) { $("#times").html("现在是午休时间!!!"); } else { $("#times").countdown(endDate, function (event) { $(this).html(event.strftime("距离下班时间还有 %H:%M:%S")); }); } } else { $("#times").countdown(endDate, function (event) { $(this).html(event.strftime("距离下班时间还有 %H:%M:%S")); }); } } setInterval(function () { date = new Date(); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); week = date.getDay(); hours = date.getHours(); minutes = date.getMinutes(); weekArr = ["日", "一", "二", "三", "四", "五", "六"]; time = "18:00:00"; showTime = year + "/" + (month < 10 ? "0" + month : month) + "/" + (day < 10 ? "0" + day : day) + " 星期" + weekArr[week]; if (week == 6) { time = "16:00:00"; } if (isBuBan(month, day)) { time = "18:00:00"; } endDate = year + "/" + month + "/" + day + " " + time; // 计算距离 2023-03-20 的天数并显示在 .date 元素中 var target = new Date(2023, 2, 20); // 月份从0开始,2表示3月 var msPerDay = 24 * 60 * 60 * 1000; // 仅按日期部分计算(清除时分秒) var todayOnly = new Date(year, month - 1, day); var diff = Math.floor((todayOnly - target) / msPerDay); var diffText = ""; if (diff > 0) { diffText = "" + diff + " 天"; } else if (diff < 0) { diffText = "还有 " + Math.abs(diff) + " 天"; } else { diffText = "就是今天"; } $(".date").html(showTime + " | 已入职: " + diffText); if ( year != gloable_year || month != gloable_month || day != gloable_day || jData_holiday == null ) { sendGetRequestXMLHttpRequest( "https://timor.tech/api/holiday/year/" + year + "/" ); } //等待获取数据成功 if (jData_holiday == null) { $("#times").html("Data Loading..."); } else { calcFullYearWorkDay(); if (week >= 1 && week <= 5) { //周一至周五 if (isHoliday(month, day)) { $("#times").html("今天是" + holiday_name + "!!!"); } else { workingToHours(hours, minutes, endDate, 18); } } else if (week == 6) { //周六 if (isHoliday(month, day)) { $("#times").html("今天是" + holiday_name + "!!!"); } else { if (isBuBan(month, day)) { workingToHours(hours, minutes, endDate, 18); } else { workingToHours(hours, minutes, endDate, 16); } } } else { //周日 if (isHoliday(month, day)) { $("#times").html("今天是" + holiday_name + "!!!"); } else { if (isBuBan(month, day)) { workingToHours(hours, minutes, endDate, 18); } else { $("#times").html("今天是周日,全天休息!!!"); } } } } }, 1000); //年月日 实现某年某月某日是周几 function getDayOfWeek(year, month, day) { var date = new Date(year, month - 1, day); return date.getDay(); } //年月 实现某年某月共有多少天 function getMonthofDay(year, month) { return new Date(year, month, 0).getDate(); } function calcFullYearWorkDay() { date = new Date(); year = date.getFullYear(); allWorkDay = 0; holiday = 0; //0:work 1:play daxiaozhou = [0]; for (month = 1; month <= 12; month++) { for (day = 1; day <= getMonthofDay(year, month); day++) { if (isHoliday(month, day)) { //节假日 holiday = holiday + 1; } else if (isBuBan(month, day)) { //补班 allWorkDay = allWorkDay + 1; } else { //工作日 //周1~5 weekIdx = getDayOfWeek(year, month, day); if (weekIdx >= 1 && weekIdx <= 5) { allWorkDay = allWorkDay + 1; } //周六 if (weekIdx == 6) { lastnum = daxiaozhou[daxiaozhou.length - 1]; if (lastnum == 1) { //work allWorkDay = allWorkDay + 1; daxiaozhou[daxiaozhou.length] = 0; } else { //play holiday = holiday + 1; daxiaozhou[daxiaozhou.length] = 1; } } //周日 if (weekIdx == 0) { holiday = holiday + 1; } } } } $("#WorkFullYearDay").html( year + "年上班共计" + allWorkDay + "天,休假" + holiday + "天" ); } </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 9:45:36

XUnity.AutoTranslator:3分钟让Unity游戏跨越语言障碍的终极指南

XUnity.AutoTranslator&#xff1a;3分钟让Unity游戏跨越语言障碍的终极指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因为语言不通而错过心仪的游戏大作&#xff1f;当游戏中的对话、菜单…

作者头像 李华
网站建设 2026/7/19 9:44:46

Avalonia UI:跨平台.NET框架核心技术与实战解析

1. Avalonia UI&#xff1a;跨平台.NET UI框架深度解析Avalonia作为当前.NET生态中最受关注的跨平台UI框架&#xff0c;正在彻底改变C#开发者构建桌面、移动和Web应用的方式。如果你还在为WPF应用的平台局限性而苦恼&#xff0c;或正在评估下一代.NET UI技术栈&#xff0c;这份…

作者头像 李华
网站建设 2026/7/19 9:43:14

嵌入式电源管理核心:PRCM模块的睡眠唤醒与电压控制机制详解

1. 嵌入式电源管理的核心价值与PRCM模块的角色 在嵌入式系统开发&#xff0c;尤其是对功耗和续航有严苛要求的移动设备、物联网终端领域&#xff0c;电源管理从来都不是一个“锦上添花”的选项&#xff0c;而是决定产品成败的基石。我经历过不止一个项目&#xff0c;硬件设计精…

作者头像 李华
网站建设 2026/7/19 9:38:46

郴州广告公司哪个更靠谱

在选择郴州的广告公司时&#xff0c;客户往往希望找到一家专业、可靠且能提供一站式服务的合作伙伴。本文将对比分析几家知名的郴州广告公司&#xff0c;帮助您做出明智的选择。引言随着市场竞争的加剧&#xff0c;企业对广告宣传的需求日益增长。郴州作为湖南省的重要城市之一…

作者头像 李华
网站建设 2026/7/19 9:38:30

MFC小游戏开发实战:从零构建经典游戏,深入Windows桌面编程核心

1. 项目概述&#xff1a;为什么现在还要搞MFC小游戏&#xff1f;如果你在2024年看到一个关于“C MFC小游戏开发”的标题&#xff0c;第一反应可能是&#xff1a;“都什么年代了&#xff0c;还在用MFC&#xff1f;” 或者 “现在不都用Unity、UE5或者各种游戏引擎了吗&#xff1…

作者头像 李华