From cc3ed6e23609115aa7529811577bfbdf029b0ee2 Mon Sep 17 00:00:00 2001 From: mei Date: Wed, 19 Aug 2026 10:51:34 +0800 Subject: [PATCH] fix --- source/js/die.js | 124 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 source/js/die.js diff --git a/source/js/die.js b/source/js/die.js new file mode 100644 index 0000000..3800f01 --- /dev/null +++ b/source/js/die.js @@ -0,0 +1,124 @@ +(function () { + "use strict"; + var style = document.createElement("style"); + style.innerHTML = ` + .memorial-overlay { + position: fixed; top: 0; left: 0; width: 100%; height: 100%; + background: rgba(0, 0, 0, 0.75); z-index: 9999; + display: flex; align-items: center; justify-content: center; + opacity: 0; transition: opacity 0.4s ease; pointer-events: none; + } + .memorial-overlay.active { opacity: 1; pointer-events: auto; } + .memorial-card { + background: #222; color: #ddd; max-width: 500px; width: 90%; + padding: 40px; border-radius: 4px; text-align: center; + border: 1px solid #333; transform: translateY(20px); transition: transform 0.4s ease; + } + .memorial-overlay.active .memorial-card { transform: translateY(0); } + .memorial-icon { font-size: 32px; margin-bottom: 15px; opacity: 0.6; } + .memorial-title { font-size: 22px; margin-bottom: 20px; color: #fff; letter-spacing: 2px; } + .memorial-content { font-size: 16px; line-height: 1.8; color: #bbb; margin-bottom: 30px; font-style: italic; white-space: pre-line;} + .memorial-btn { + background: transparent; border: 1px solid #555; color: #ccc; + padding: 10px 30px; font-size: 14px; cursor: pointer; + transition: all 0.3s ease; border-radius: 2px; + } + .memorial-btn:hover { background: #333; border-color: #888; color: #fff; } + `; + document.head.appendChild(style); + + var overlay = document.createElement("div"); + overlay.className = "memorial-overlay"; + overlay.innerHTML = ` +
+
+
+ +
+ `; + document.body.appendChild(overlay); + + var titleEl = overlay.querySelector(".memorial-title"); + var contentEl = overlay.querySelector(".memorial-content"); + var btnEl = overlay.querySelector(".memorial-btn"); + + function closePopup() { + overlay.classList.remove("active"); + } + + function showPopup(options) { + if (!options) return; + titleEl.textContent = options.title || "再见"; + contentEl.textContent = options.content || ""; + overlay.classList.add("active"); + } + + btnEl.addEventListener("click", closePopup); + overlay.addEventListener("click", function (e) { + if (e.target === overlay) closePopup(); + }); + window.MemorialPopup = { + show: showPopup, + close: closePopup, + }; + var config = { + grayscale: 1, + opacity: 1, + target: "html", + autoEnable: true, + }; + + var cssText = + "filter: grayscale(" + config.grayscale + "); " + + "opacity: " + config.opacity + "; " + + "-webkit-filter: grayscale(" + config.grayscale + "); " + + "-moz-filter: grayscale(" + config.grayscale + "); " + + "-ms-filter: grayscale(" + config.grayscale + "); " + + "-o-filter: grayscale(" + config.grayscale + ");"; + + var isApplied = false; + + function enableGrayscale() { + if (isApplied) return; + var el = document.querySelector(config.target); + if (el) { + el.style.cssText += ";" + cssText; + isApplied = true; + console.log("die on"); + setTimeout(function () { + if (window.MemorialPopup) { + window.MemorialPopup.show({ + title: "再见", + content: "当你看到这个弹窗时,我大概已经死了。\n生命是如此虚假,苦痛又是如此的真实。\n我不想再继续了,让我死在妄想破碎之前吧。\n", + }); + } + }, 1000); + } else { + console.warn("die not found: " + config.target); + } + } + + function disableGrayscale() { + if (!isApplied) return; + var el = document.querySelector(config.target); + if (el) { + el.style.filter = ""; + el.style.webkitFilter = ""; + el.style.opacity = ""; + isApplied = false; + console.log("die off"); + } + } + if (config.autoEnable) { + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", enableGrayscale); + } else { + enableGrayscale(); + } + } + window.MemorialMode = { + enable: enableGrayscale, + disable: disableGrayscale, + config: config, + }; +})(); \ No newline at end of file