您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-clicker with a draggable UI that works on desktop and mobile devices too.
当前为
// ==UserScript== // @name Auto Clicker with Mobile & Desktop Draggable UI // @namespace http://tampermonkey.net/ // @version 1.3 // @description Auto-clicker with a draggable UI that works on desktop and mobile devices too. // @author You // @match *://*/* // @grant none // @run-at document-end // @license MIT // ==/UserScript== (function () { 'use strict'; let isClicking = false; let interval = 1000; let clickInterval; let targetElement = null; // Create panel const panel = document.createElement('div'); panel.style.position = 'fixed'; panel.style.top = '50px'; panel.style.left = '50px'; panel.style.backgroundColor = 'white'; panel.style.border = '2px solid black'; panel.style.padding = '10px'; panel.style.zIndex = '99999'; panel.style.fontFamily = 'Arial, sans-serif'; panel.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)'; panel.style.touchAction = 'none'; // important for mobile drag panel.setAttribute('id', 'autoClickerPanel'); panel.innerHTML = ` <div id="panelHeader" style="font-weight:bold; cursor:move; margin-bottom:8px;">Auto Clicker</div> Delay (ms): <input type="number" id="clickDelay" value="1000" style="width: 80px;"><br><br> <button id="selectTarget">Select Target</button><br><br> <button id="startClicker">Start</button> <button id="stopClicker">Stop</button> `; document.body.appendChild(panel); // Make panel draggable on both desktop & mobile (function makeDraggable(el) { const header = document.getElementById('panelHeader'); let offsetX = 0, offsetY = 0, isDragging = false; const startDrag = (e) => { isDragging = true; offsetX = (e.touches ? e.touches[0].clientX : e.clientX) - el.offsetLeft; offsetY = (e.touches ? e.touches[0].clientY : e.clientY) - el.offsetTop; document.addEventListener('mousemove', drag); document.addEventListener('mouseup', stopDrag); document.addEventListener('touchmove', drag); document.addEventListener('touchend', stopDrag); }; const drag = (e) => { if (!isDragging) return; const clientX = e.touches ? e.touches[0].clientX : e.clientX; const clientY = e.touches ? e.touches[0].clientY : e.clientY; el.style.left = (clientX - offsetX) + 'px'; el.style.top = (clientY - offsetY) + 'px'; }; const stopDrag = () => { isDragging = false; document.removeEventListener('mousemove', drag); document.removeEventListener('mouseup', stopDrag); document.removeEventListener('touchmove', drag); document.removeEventListener('touchend', stopDrag); }; header.addEventListener('mousedown', startDrag); header.addEventListener('touchstart', startDrag); })(panel); // Event Listeners document.getElementById('selectTarget').addEventListener('click', () => { alert('Tap the element you want to auto-click.'); document.body.style.cursor = 'crosshair'; const onClick = (e) => { e.preventDefault(); e.stopPropagation(); targetElement = e.target; document.body.style.cursor = 'default'; document.removeEventListener('click', onClick, true); alert('Target selected: ' + targetElement.tagName); }; document.addEventListener('click', onClick, true); }); document.getElementById('startClicker').addEventListener('click', () => { if (!targetElement) { alert('No target selected!'); return; } if (isClicking) return; interval = parseInt(document.getElementById('clickDelay').value); isClicking = true; clickInterval = setInterval(() => { try { targetElement.click(); } catch (err) { console.error('Click failed:', err); } }, interval); }); document.getElementById('stopClicker').addEventListener('click', () => { isClicking = false; clearInterval(clickInterval); }); })();