您需要先安装一个扩展,例如 篡改猴、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);
- });
- })();