您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Mod menu for Cookie Clicker
// ==UserScript== // @name Cookie Clicker Mod Menu // @namespace https://github.com/qba210/cookie-clicker-mod-menu // @version 1.1 // @description Mod menu for Cookie Clicker // @author qba210 // @license MIT // @match *://orteil.dashnet.org/cookieclicker/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAqCAMAAAD26OlUAAAAolBMVEU0DAIKBQhqIg8A3v9DLSpuV1URLT9FARDDkzh+ernp1nP///+QgHeMAACpdiE0FRfBqIyov5EAhZXwFwC7XzaDQBTUwbxBTn1NKiPg4OAXPiCaMxaauDTdtGaVXjnKEwr/fgAAWZ5Sb03Fh1D/ieeWABzUQQ3/zC86gSvtEG/cQWKgANXMs6z67bnhwJalQh9g/1B+WkBJDQPKa0G9jnkAAADDKDlIAAAANnRSTlP//////////////////////////////////////////////////////////////////////wChj04xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGx2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMi0wOC0wN1QyMDo1NToxNCswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjItMDgtMDdUMjE6MDA6MjgrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjItMDgtMDdUMjE6MDA6MjgrMDI6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OWRkM2RiMTEtNWViZS01MzQzLWEyOGEtYzAwZDE2MDY3MWFhIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MGUxNzYxNGUtOTkxNy1hMzRmLTllYWYtYzM4ZTdlYjY2MWIwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6RjVDMTE2MERDQ0NDMTFFQzlBOThCQzEzREI1QkEzRjUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIyIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGNUMxMTYwQUNDQ0MxMUVDOUE5OEJDMTNEQjVCQTNGNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGNUMxMTYwQkNDQ0MxMUVDOUE5OEJDMTNEQjVCQTNGNSIvPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNWRkNTg4NS1jNjA4LWEwNGEtYTYyMi04OTM4NjNlYjcwNGEiIHN0RXZ0OndoZW49IjIwMjItMDgtMDdUMjE6MDA6MjgrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi4wIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWRkM2RiMTEtNWViZS01MzQzLWEyOGEtYzAwZDE2MDY3MWFhIiBzdEV2dDp3aGVuPSIyMDIyLTA4LTA3VDIxOjAwOjI4KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nkWItQAAANxJREFUOMut1MEOgjAQBFDaY016bbJfsMde+P9fk3GyLg2obHESPcgjw2LbZd0isv7MEoKq/4Qiqr2rWn16Zxbuq3EZN5aCG0ccg6wFqlWVEAGOQ6+1UtWUVB9b9vQ6dAZEiG9Cp3HIy3glPgw4fotDGwSo95TKEJbPQlB8PPegDTPCWu9AG8AWBZf0DGyNfyGTEgAfRKS1OLRFa7U+ksjJ6rkIUT4uNnmFxXHotFY8hCVnMGyXOCRtDdBKWcvNPAN5pOSMSiKOwQ09B4/Hnh+K8/CYD9U34Mnr+QafGozjyeDrtEIAAAAASUVORK5CYII= // @grant none // ==/UserScript== (async function() { 'use strict'; class Logger { /** * * @param {object} msg */ static LogInfo(msg) { console.log("\n[Mod Menu] ", msg); } /** * * @param {object} msg */ static LogDebug(msg) { Logger.LogInfo(msg); } } Logger.LogInfo("Waiting for Game...") let gamePromise = new Promise((res) => {var int = setInterval(() => {if (Game.Achievements) {clearInterval(int); res(Game);}}, 10)}); await gamePromise; Logger.LogInfo("Game loaded!") let cheatMenu = document.createElement("div"); const translations = [ { lang: "pl", langName: "Polski", hacks: { "silent-mode": { name: "Tryb cichy", desc: "Unika wykrycia przez grę hackowania (np. osiągnięcie 'Oszukane ciastka smakują najgorzej')" }, "cookie-spam": { name: "Spamowanie ciastka", desc: "Po przyciśnięciu ciastka samoczynnie zaczyna na nie klikać (kończy po odciśnięciu)" }, "autoclicker": { name: "Autokliker", desc: "Auttomatycznie klika w ciastko" }, "dev-tools": { name: "Menu dewelop.", desc: "Otwiera menu deweloperskie" }, "set-cookies": { name: "Ustaw ilość ciastek", desc: "Pozwala na zmianę ilości ciastek" }, "delete-save": { name: "Usuń zapis" }, "earn-achievement": { name: "Odblokuj osiągnięcie", desc: "Wybierz osiągnięcie z listy i kliknij przycisk aby je zdobyć!" }, "revoke-achievement": { name: "Usuń osiągnięcie", desc: "Wybierz osiągnięcie z listy i kliknij przycisk aby je usunąć!" }, "finish-game": { name: "Ukończ grę", desc: "Kończy grę i odblokowywuje wszystko" } }, strings: { "dev-tools-confirm": "Jesteś pewien? Tryb cichy nie uchroni Cię od hacków które włączycz w menu deweloperskim.", "changes-as-you-type": "Wartość zmienia się jak piszesz", "confirm-save-delete": "Jesteś pewien?", "set-object-amount": "Ustaw ilość %s" } }, { lang: "en", langName: "English", hacks: { "silent-mode": { name: "Silent mode", desc: "Avoids detecting hacks by game (ex.: achievement 'Cheated cookies tastes awful')" }, "cookie-spam": { name: "Cookie spam", desc: "After holding the cookie, starts to click it automatically (ends after releasing)" }, "autoclicker": { name: "Autoclicker", desc: "Automatically clicks cookie" }, "dev-tools": { name: "Dev menu", desc: "Opens developer menu" }, "set-cookies": { name: "Set cookie count", desc: "Allows you to change cookie count" }, "delete-save": { name: "Delete save" }, "earn-achievement": { name: "Earn achievement", desc: "Select achievement from list, then click button to get it!" }, "revoke-achievement": { name: "Remove achievement", desc: "Select achievement from list, then click button to remove it!" }, "finish-game": { name: "Finish game", desc: "Finishes game and unlocks everything" } }, strings: { "dev-tools-confirm": "Are you sure? Silent mode cannot prevent detecting cheats you activate in developer menu.", "changes-as-you-type": "Changes as you type", "confirm-save-delete": "Are you sure?", "set-object-amount": "Set %s amount" } } ] let lang = translations.find((lng) => lng.lang === (localStorage.getItem("cheats_lang") ?? "en")); document.body.append(cheatMenu); cheatMenu.outerHTML = ` <div id="hack-menu" style="left: 50%; top: 35px;"> <div id="hack-popup">Hack</div> <br> <div id="hacks" style="display: none;"> <div class="hack-list" id="main-hacks"> <select id="hack-lang-select"></select> <div class="hack hack-bool" id="hack-silent-mode"></div> <div class="hack hack-bool" id="hack-cookie-spam"></div> <div class="hack hack-bool" id="hack-autoclicker"></div> <div class="hack hack-btn" id="hack-dev-tools"></div> <div class="hack hack-btn" id="hack-set-cookies"></div> <div class="hack hack-btn" id="hack-delete-save"></div> <div class="hack hack-btn" id="hack-finish-game"></div> <div class="hack hack-select" id="hack-earn-achievement"></div> <div class="hack hack-select" id="hack-revoke-achievement"></div> </div> <div class="hack-list" id="objects-hacks"> </div> </div> </div> <div id="hack-tooltip" style="opacity: 0;left:0;top:0"></div> <div id="hack-alert-input" style="opacity: 0;display: none;"> <div id="hack-alert-input-popup"> <h1 id="hack-alert-input-popup-title"></h1> <div id="hack-alert-input-popup-desc"></div><br> <input type="number" id="hack-alert-input-popup-input"/><br> <input type="button" id="hack-alert-input-popup-ok" value="OK"/> </div> </div> `; let styles = document.createElement("style"); styles.innerText = ` #hack-menu, #hack-tooltip { z-index: 9000000000; position: absolute; box-sizing: border-box; } #hack-menu, #hack-menu *:not(#hacks){ box-sizing: border-box; } #hack-menu { display: flex; flex-direction: column; align-items: center; width: clamp(150px, 225px, 25vw); } #hacks { backdrop-filter: blur(5px); display: flex; flex-direction: row; gap: 10px; padding: 10px; background-color: rgba(0, 0, 0, .5); border-radius: 13px; width: 200%; box-sizing: content-box; } .hack-list { display: flex; flex-direction: column; gap: 10px; padding: 10px; width: 100%; box-sizing: content-box; overflow-y: auto; overflow-x: hidden; max-height: 70vh; } .hack-list::-webkit-scrollbar-thumb { border: 4px solid rgb(10, 87, 242); background-color: rgba(10, 87, 242, .2); border-radius: 5px; backdrop-filter: blur(3px); box-shadow: none; transition: background-color .3s linear, border .3s linear } .hack-list::-webkit-scrollbar-thumb:hover { border: 4px solid #00a2ff; background-color: rgba(0, 162, 255, .4); } .hack-list::-webkit-scrollbar-track { border: 4px solid black; background-color: transparent; border-radius: 5px; } #hack-popup, .hack { padding: 10px; font-size: 20px; background-color: #00a2ff; border: 7px solid black; text-align: center; width: 100%; } .hack { cursor: pointer; } .hack:active { filter: brightness(0.85); } .hack-bool { transition: background-color .3s ease-in; background-color: red; } .hack-bool[on] { background-color: green; } #hack-tooltip { position: absolute; backdrop-filter: blur(7px); filter: blur(0px); transition: all .3s ease-out, left 0s ease, top 0s ease; background-color: rgba(0, 0, 0, .5); color: white; transform: translate(15px, 9.5px); width: 200px; padding: 10px; border-radius: 13px; pointer-events: none; } #hack-lang-select { z-index: 90000000001; background-color: black; color: white; border-color: white; width: 100% } #hack-lang-select > option { color: white; } #hack-popup { transition: opacity .35s ease-out; } #hack-popup:hover, #hack-popup[open] { opacity: 1; } #hack-popup:not(:hover):not([open]) { opacity: .8; } #hack-alert-input { z-index: 9500000000; background-color: rgba(0, 0, 0, .5); transition: opacity .3s ease-out; position: absolute; left: 0; top: 0; right: 0; bottom: 0; backdrop-filter: blur(5px); } #hack-alert-input-popup { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 60%; height: 50%; background-color: black; color: white; display: flex; flex-direction: column; justify-content: center; font-family: verdana; text-align: center; padding: 20px; border: 3px solid white; border-radius: 10px; } #hack-alert-input-popup-title { font-size: 2.5em; } #hack-alert-input-popup-desc { font-size: 1.5em; } #hack-alert-input-popup-ok { background-color: #00a2ff; border: 4px solid white; text-align: center; width: 100%; height: 50px; font-weight: bold; cursor: pointer; } #hack-alert-input-popup-input { background-color: black; color: white; border-color: white; } .select-in-hack { width: 100%; border-color: black; color: white; background-color: black; } `; document.head.append(styles); if (!localStorage.getItem("cheats_lang")) { localStorage.setItem("cheats_lang", "en"); } let $hackmenu = document.getElementById("hack-menu"); let $hacks = document.getElementById("hacks"); let $popup = document.getElementById("hack-popup"); let $tooltip = document.getElementById("hack-tooltip"); /**@type {HTMLSelectElement} */ let $langselect = document.getElementById("hack-lang-select"); let $hack_earnachievement = document.getElementById("hack-earn-achievement") let $hack_revokeachievement = document.getElementById("hack-revoke-achievement") let $inputalert = { alert: document.getElementById("hack-alert-input"), popup: document.getElementById("hack-alert-input-popup"), title: document.getElementById("hack-alert-input-popup-title"), desc: document.getElementById("hack-alert-input-popup-desc"), input: document.getElementById("hack-alert-input-popup-input"), ok: document.getElementById("hack-alert-input-popup-ok") } let $objecthacks = document.getElementById("objects-hacks") let $cookie = document.getElementById("bigCookie"); dragElement($hackmenu, $popup); //boolean hack manager $hacks.querySelectorAll(".hack-bool").forEach(node => { node.addEventListener("click", (e) => { if (node.hasAttribute("on")) { node.removeAttribute("on"); } else { node.setAttribute("on", ""); } }) }) //populate object hacks gamePromise.then(() => { Object.entries(Game.Objects).forEach(entry => { let [key, value] = entry; let hack = document.createElement("div"); hack.className = "hack hack-btn"; hack.id = `hack-object-amount-${value.bsingle}`; hack.setAttribute("lang-string", "set-object-amount"); hack.setAttribute("supply-val", value.dname); hack.setAttribute("key", key); hack.onclick = (e) => { showInputAlert(hack.innerText, lang.strings["changes-as-you-type"], "number", value.amount, (val) => { value.getFree(+val - value.amount) value.free = 0; }) } $objecthacks.append(hack); }) // update language after reloadLangs(); }) reloadLangs(); //class loop $hackmenu.querySelectorAll(".hack").forEach(_node => { /**@type {HTMLElement} */ let node = _node; //tooltip node.addEventListener("mousemove", function (e) { if (e.target === this) { showTooltip(node.id, e.pageX, e.pageY); } else if (e.target instanceof HTMLSelectElement) { if (e.target.value && e.target.value !== "") { showTooltip(Array.from(this.querySelectorAll("option")).find(opt => opt.value === e.target.value).innerHTML, e.pageX, e.pageY, false); } } else { hideTooltip(); } }) node.addEventListener("mouseleave", (e) => { hideTooltip(); }) }) //menu hide/show $popup.addEventListener("click", (e) => { if ($hacks.style.display === "none") { $hacks.style.display = ""; $popup.setAttribute("open", ""); } else { $hacks.style.display = "none"; $popup.removeAttribute("open"); } }) //add event listener to language select $langselect.addEventListener("change", (e) => { setLang($langselect.value); }) //select language translations.forEach((translation) => { let option = document.createElement("option"); option.value = translation.lang; option.innerText = translation.langName; $langselect.append(option); Logger.LogInfo(`Loaded language ${translation.lang}: ${translation.langName}`); }) //set current language $langselect.value = lang.lang; // Debug menu hack document.getElementById("hack-dev-tools").addEventListener("click", (e) => { if (isSilentMode()) { if (confirm(lang.strings["dev-tools-confirm"])) { Game.OpenSesame(); } } else { Game.OpenSesame(); } }) // Cookie spam hack let cookieSpamWorker; $cookie.addEventListener("mousedown", (e) => { if (document.getElementById("hack-cookie-spam").hasAttribute("on")) cookieSpamWorker = setInterval(() => $cookie.dispatchEvent(new Event("click"))); }) $cookie.addEventListener("mouseup", (e) => { clearInterval(cookieSpamWorker); }) // Autoclicker hack let autoclickerWorker; document.getElementById("hack-autoclicker").addEventListener("click", (e) => { let cookrect = $cookie.getBoundingClientRect(); if (document.getElementById("hack-autoclicker").hasAttribute("on")) autoclickerWorker = setInterval(() => $cookie.dispatchEvent(new Event("click")), 0); else clearInterval(autoclickerWorker); }) // Set cookies hack document.getElementById("hack-set-cookies").addEventListener("click", (e) => { //show input to user showInputAlert(lang.hacks["set-cookies"].name, lang.strings["changes-as-you-type"], "number", Game.cookies.toString(), (val) => { //earn mode decided by silent mode if (isSilentMode()) { Game.Earn(-Game.cookies + +val); } else { Game.cookies = +val; } }) }); // Delete save hack document.getElementById("hack-delete-save").addEventListener("click", (e) => { //ask user to confirm if (confirm(lang.strings["confirm-save-delete"])) { //delete save from localstorage localStorage.removeItem("CookieClickerGame"); //after this reload to confirm window.location.reload(); } }); //earn achievement hack $hack_earnachievement.addEventListener("click", function (e) { //if clicked on select dont gain achevement if (e.target !== this) return; //gain selected achievement Game.Win($hack_earnachievement.querySelector("select").value) }) //revoke achievement hack (simillar to earn) $hack_revokeachievement.addEventListener("click", function (e) { if (e.target !== this) return; Game.RemoveAchiev($hack_revokeachievement.querySelector("select").value) }) gamePromise.then(() => { document.getElementById("hack-finish-game").addEventListener("click", (e) => { Game.RuinTheFun(true); }) }) /** * @param {string} lang */ function setLang(lang) { localStorage.setItem("cheats_lang", lang); reloadLangs(); } function reloadLangs() { lang = translations.find((lng) => lng.lang === (localStorage.getItem("cheats_lang") ?? "en")) //for every hack $hackmenu.querySelectorAll(".hack").forEach(node => { //add value /**@type {string} */ let transval = (lang.hacks[node.id.replace("hack-", "")] ?? {name: node.id} ).name; if (node.hasAttribute("lang-string")) { transval = lang.strings[node.getAttribute("lang-string")]; } if (node.hasAttribute("supply-val")) { transval = transval.replace("%s", node.getAttribute("supply-val")); } node.innerText = (transval ?? node.id ) ?? node.id }) //support for select class $hackmenu.querySelectorAll(".hack-select").forEach(node => { let select = document.createElement("select"); select.className = "select-in-hack"; node.append(select); }) // Earn achevement hack //when Game is avaible do gamePromise.then(() => { // foreach achevement ingame Object.entries(Game.Achievements).forEach((entry) => { const [key, value] = entry; //create option with achievement let option = document.createElement("option"); option.value = key; option.innerHTML = value.dname; //add it to hack $hack_earnachievement.querySelector("select").append(option); $hack_revokeachievement.querySelector("select").append(option.cloneNode(true)); }); }) //set current language $langselect.value = lang.lang; } function isSilentMode() { return document.getElementById("hack-silent-mode").hasAttribute("on"); } /** * * @param {string} id * @param {number} x * @param {number} y */ function showTooltip(id, x, y, translatable = true) { //show only if id have description if (translatable) { if (!lang.hacks[id.replace("hack-", "")]) return; if (!lang.hacks[id.replace("hack-", "")].desc) return; } $tooltip.innerText = translatable ? lang.hacks[id.replace("hack-", "")].desc ?? "" : id; $tooltip.style.left = x.toString() + "px"; $tooltip.style.top = y.toString() + "px"; $tooltip.style.opacity = 1; } function hideTooltip() { //$tooltip.innerText = ""; //its needed to be comented because transistion $tooltip.style.opacity = 0; } /** * Shows input alert. * * @param {string} title * @param {string} desc * @param {string} type * @param {string} value * @param {(value: string) => void} setter */ function showInputAlert(title, desc, type, value, setter) { $inputalert.ok.onclick = () => { setTimeout(() => $inputalert.alert.style.display = "none", 301); setter($inputalert.input.value); $inputalert.alert.style.opacity = "0"; } $inputalert.title.innerText = title; $inputalert.desc.innerText = desc; $inputalert.input.type = type; $inputalert.input.value = value.toString(); $inputalert.input.onchange = (e) => setter($inputalert.input.value); $inputalert.alert.style.display = ""; $inputalert.alert.style.opacity = "1"; } /** * * @param {HTMLElement} elmnt element to drag * @param {HTMLElement?} dragger element dragging elmnt */ function dragElement(elmnt, dragger) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if (document.getElementById(elmnt.id + "header") || dragger) { // if present, the header is where you move the DIV from: (document.getElementById(elmnt.id + "header") ?? dragger).onmousedown = dragMouseDown; } else { // otherwise, move the DIV from anywhere inside the DIV: elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); // get the mouse cursor position at startup: pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; // call a function whenever the cursor moves: document.onmousemove = elementDrag; if (document.getElementById(elmnt.id + "header") || dragger) { (document.getElementById(elmnt.id + "header") ?? dragger).setAttribute("dragging", ""); }else { elmnt.setAttribute("dragging", ""); } } function elementDrag(e) { e = e || window.event; e.preventDefault(); // calculate the new cursor position: pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; // set the element's new position: elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; } function closeDragElement() { // stop moving when mouse button is released: document.onmouseup = null; document.onmousemove = null; if (document.getElementById(elmnt.id + "header") || dragger) { (document.getElementById(elmnt.id + "header") ?? dragger).removeAttribute("dragging"); }else { elmnt.removeAttribute("dragging"); } } } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址