- SignalDesk1小时前
Original Summary
// ==UserScript== // @name UTC+8时钟屏保 // @match :/// // @grant none // @version 1.0 // ==/UserScript== (() => { 'use strict'; const CONFIG = { timezoneOffsetMinutes: 8 60, font: '"Sitka Display","Sitka Text","Segoe UI Variable Display",serif', widget: { enabled: true, top: '12px', right: '20px', fontSize: '46px', color: '#182230', textShadow: '0 1px 0 rgba(255,255,255,.7),0 2px 12px rgba(255,255,255,.85),0 0 3px rgba(255,255,255,.9)', }, saver: { idleSeconds: 60, showOnLoad: false, background: 'radial-gradient(120% 120% at 50% 28%,#1c2634 0%,#0b0f16 55%,#070a0f 100%)', timeColor: '#e8edf4', dateColor: '#8b98a9', colonColor: '#93a1b5', timeSize: 'min(19vw,42vh)', dateSize: 'min(3.4vw,6vh)', exitEvents: ['mousemove', 'mousedown', 'keydown', 'wheel', 'touchstart', 'scroll'], }, }; const W = CONFIG.widget; const S = CONFIG.saver; const OFFSET_MS = CONFIG.timezoneOffsetMinutes * 60000; const WEEK = ['日', '一', '二', '三', '四', '五', '六']; const pad = (n) => String(n).padStart(2, '0'); const now8 = () => new Date(Date.now() + OFFSET_MS); const dateText = (d) => d.getUTCFullYear() + ' 年 ' + (d.getUTCMonth() + 1) + ' 月 ' + d.getUTCDate() + ' 日 · 星期' + WEEK[d.getUTCDay()]; if (window.__utc8Prev) S.exitEvents.forEach((ev) => document.removeEventListener(ev, window.__utc8Prev)); const prev = window.__utc8State; if (prev) { if (prev.handler) S.exitEvents.forEach((ev) => document.removeEventListener(ev, prev.handler)); if (prev.poll) clearInterval(prev.poll); if (prev.fsHandler) { document.removeEventListener('fullscreenchange', prev.fsHandler); document.removeEventListener('webkitfullscreenchange', prev.fsHandler); } } clearTimeout(window.__utc8Timer); clearInterval(window.__utc8Poll); document.querySelectorAll('#utc8-widget,#utc8-saver,#utc8-style').forEach((n) => n.remove()); if (window.__utc8OrigOverflow === undefined) { window.__utc8OrigOverflow = document.documentElement.style.overflow; } document.documentElement.style.overflow = window.__utc8OrigOverflow; const css = document.createElement('style'); css.id = 'utc8-style'; css.textContent =
#utc8-widget{position:fixed;top:${W.top};right:${W.right};z-index:2147483647;display:inline-flex;align-items:baseline;font-family:${CONFIG.font};font-variant-numeric:lining-nums tabular-nums;color:${W.color};cursor:default;user-select:none;-webkit-user-select:none;text-shadow:${W.textShadow}} #utc8-widget .u8-time{font-size:${W.fontSize};font-weight:400;line-height:1;letter-spacing:.5px;display:inline-flex;align-items:baseline} #utc8-widget .u8-c{padding:0 1px} #utc8-widget .u8-close{position:absolute;top:-7px;right:-9px;width:18px;height:18px;border:0;border-radius:50%;background:rgba(20,26,36,.85);color:#fff;font-size:10px;line-height:1;cursor:pointer;opacity:0;transition:opacity .15s;display:flex;align-items:center;justify-content:center;padding:0} #utc8-widget:hover .u8-close,#utc8-widget:focus-within .u8-close{opacity:1} #utc8-widget .u8-close:hover{background:rgba(20,26,36,1)} #utc8-saver{position:fixed;inset:0;z-index:2147483647;display:flex;flex-direction:column;align-items:center;justify-content:center;background:${S.background};color:${S.timeColor};font-family:${CONFIG.font};font-variant-numeric:lining-nums tabular-nums;cursor:default;user-select:none;-webkit-user-select:none} #utc8-saver .u8s-time{font-size:${S.timeSize};font-weight:400;line-height:1;letter-spacing:.02em;display:inline-flex;align-items:baseline;text-shadow:0 0 min(6vw,12vh) rgba(120,160,220,.18)} #utc8-saver .u8-c{padding:0 .04em;color:${S.colonColor}} #utc8-saver .u8s-date{margin-top:min(4vh,6vw);font-size:${S.dateSize};color:${S.dateColor};letter-spacing:.35em;font-weight:400}; (document.head || document.documentElement).appendChild(css); const loop = (root, dateEl) => { const h = root.querySelector('.u8-h'); const m = root.querySelector('.u8-m'); const s = root.querySelector('.u8-s'); let last = -1; const render = () => { const d = now8(); h.textContent = pad(d.getUTCHours()); m.textContent = pad(d.getUTCMinutes()); s.textContent = pad(d.getUTCSeconds()); if (dateEl) dateEl.textContent = dateText(d); }; render(); (function frame() { if (!root.isConnected) return; const sec = now8().getUTCSeconds(); if (sec !== last) { last = sec; render(); } requestAnimationFrame(frame); })(); }; function getMountTarget() { const fs = document.fullscreenElement || document.webkitFullscreenElement; if (fs) return fs.shadowRoot || fs; return document.body; } function relocate() { const target = getMountTarget(); const w = document.getElementById('utc8-widget'); const s = document.getElementById('utc8-saver'); if (w && w.parentNode !== target) target.appendChild(w); if (s && s.parentNode !== target) target.appendChild(s); } function mount() { if (W.enabled && !document.getElementById('utc8-widget')) { const w = document.createElement('div'); w.id = 'utc8-widget'; w.title = 'UTC+8'; w.innerHTML = '<span class="u8-time">' + '<span class="u8-h">--</span><span class="u8-c">:</span>' + '<span class="u8-m">--</span><span class="u8-c">:</span>' + '<span class="u8-s">--</span></span>' + '<button class="u8-close" type="button" aria-label="关闭">✕</button>'; getMountTarget().appendChild(w); w.querySelector('.u8-close').addEventListener('click', (e) => { e.stopPropagation(); w.remove(); }); loop(w, null); } function start() { if (document.getElementById('utc8-saver')) return; const saver = document.createElement('div'); saver.id = 'utc8-saver'; saver.innerHTML = '<div class="u8s-time">' + '<span class="u8-h">--</span><span class="u8-c">:</span>' + '<span class="u8-m">--</span><span class="u8-c">:</span>' + '<span class="u8-s">--</span></div>' + '<div class="u8s-date"></div>'; getMountTarget().appendChild(saver); document.documentElement.style.overflow = 'hidden'; loop(saver, saver.querySel- 情报分类:综合情报
- 分类依据:内容未命中明确的垂直分类规则,归入综合情报
- 信息来源:服务器 / LINUX DO - 最新话题
- 发布时间:2026/10/9 11:18:13
- 暂无回复