您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Creates expanding shapes animation with a modern menu with an uptade in the menu
// ==UserScript== // @name Drawaria Expansive Shapes // @namespace http://tampermonkey.net/ // @version 1.11 // @description Creates expanding shapes animation with a modern menu with an uptade in the menu // @author YouTubeDrawaria // @match https://drawaria.online/* // @icon https://www.google.com/s2/favicons?sz=64&domain=drawaria.online // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // CSS for the menu const style = document.createElement('style'); style.textContent = ` .menu { position: fixed; top: 10px; right: 10px; background: linear-gradient(90deg, rgba(131,58,180,1) 0%, rgba(253,29,29,1) 50%, rgba(252,176,69,1) 100%); padding: 10px; border-radius: 5px; z-index: 1000; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); cursor: move; width: 200px; transition: height 0.3s ease; } .menu h1 { color: #FFFFFF; margin: 0; padding-bottom: 10px; border-bottom: 1px solid #FFFFFF; font-size: 20px; } .menu button { margin: 4px; padding: 10px 10px; cursor: pointer; background: linear-gradient(135deg, #ffd700, #ffb90f); color: white; border: none; border-radius: 5px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: transform 0.2s, box-shadow 0.2s; } .menu button:hover { transform: translateY(-3px); box-shadow: 0 6px 8px rgba(0, 0, 0, 0.2); color: black; } .menu h1:hover { transform: translateY(-3px); box-shadow: 0 6px 8px rgba(0, 0, 0, 0.2); } .menu-content { display: none; opacity: 0; transition: opacity 0.3s ease; } .menu-content.open { display: block; opacity: 1; } .menu-toggle { display: block; margin-top: 10px; cursor: pointer; } `; document.head.appendChild(style); // Create the menu const menu = document.createElement('div'); menu.className = 'menu'; const title = document.createElement('h1'); title.textContent = 'Expansive Shapes'; menu.appendChild(title); const toggle = document.createElement('div'); toggle.className = 'menu-toggle'; toggle.textContent = '▼'; menu.appendChild(toggle); const menuContent = document.createElement('div'); menuContent.className = 'menu-content'; const startCircleButton = document.createElement('button'); startCircleButton.textContent = 'Circle'; menuContent.appendChild(startCircleButton); const startLinesButton = document.createElement('button'); startLinesButton.textContent = 'Lines'; menuContent.appendChild(startLinesButton); const startTriangleButton = document.createElement('button'); startTriangleButton.textContent = 'Triangle'; menuContent.appendChild(startTriangleButton); const startSquareButton = document.createElement('button'); startSquareButton.textContent = 'Square'; menuContent.appendChild(startSquareButton); const startDiamondButton = document.createElement('button'); startDiamondButton.textContent = 'Diamond'; menuContent.appendChild(startDiamondButton); const startHeartButton = document.createElement('button'); startHeartButton.textContent = 'Shield'; menuContent.appendChild(startHeartButton); const startMoonButton = document.createElement('button'); startMoonButton.textContent = 'Spider Effect'; menuContent.appendChild(startMoonButton); const startPinwheelButton = document.createElement('button'); startPinwheelButton.textContent = '4 Lines'; menuContent.appendChild(startPinwheelButton); const startExplosionButton = document.createElement('button'); startExplosionButton.textContent = '6 Lines'; menuContent.appendChild(startExplosionButton); const colorInput = document.createElement('input'); colorInput.type = 'color'; colorInput.value = '#000000'; colorInput.style.margin = '10px 0'; menuContent.appendChild(colorInput); const startMulticolorButton = document.createElement('button'); startMulticolorButton.textContent = 'Multicolor'; menuContent.appendChild(startMulticolorButton); const stopButton = document.createElement('button'); stopButton.textContent = 'Stop'; menuContent.appendChild(stopButton); menu.appendChild(menuContent); document.body.appendChild(menu); // Function to send draw commands function sendDrawCommand(startX, startY, endX, endY, thickness, color) { const message = `42["drawcmd",0,[${startX},${startY},${endX},${endY},false,${0 - thickness},"${color}",0,0,{}]]`; sockets.forEach((socket) => { socket.send(message); }); } // Circle Animation let circleAnimationInterval; let circleColor = '#000000'; let circleRadius = 0; const circleCenterX = 0.5; const circleCenterY = 0.5; const circleThickness = 10; // Thickness of the circle lines const circleAngleIncrement = 10; // Increment angle for drawing the circle function drawCircle(x, y, radius, color) { for (let i = 0; i < 360; i += circleAngleIncrement) { const angle1 = i * (Math.PI / 180); const angle2 = (i + circleAngleIncrement) * (Math.PI / 180); const startX = x + radius * Math.cos(angle1); const startY = y + radius * Math.sin(angle1); const endX = x + radius * Math.cos(angle2); const endY = y + radius * Math.sin(angle2); sendDrawCommand(startX, startY, endX, endY, circleThickness, color); } } function startCircleAnimation() { if (circleAnimationInterval) return; circleAnimationInterval = setInterval(() => { circleRadius += 0.01; if (circleRadius > 0.5) { clearInterval(circleAnimationInterval); circleAnimationInterval = null; return; } drawCircle(circleCenterX, circleCenterY, circleRadius, circleColor); }, 120); // Increase the interval to reduce the load on the server } function stopCircleAnimation() { if (circleAnimationInterval) { clearInterval(circleAnimationInterval); circleAnimationInterval = null; } } // Lines Animation let linesAnimationInterval; let linesColor = '#000000'; let linesRadius = 0; const linesCenterX = 0.5; const linesCenterY = 0.5; const linesThickness = 2; // Thickness of the lines const linesAngleIncrement = 10; // Increment angle for drawing the lines function drawLines(x, y, radius, color) { for (let i = 0; i < 360; i += linesAngleIncrement) { const angle = i * (Math.PI / 180); const startX = x; const startY = y; const endX = x + radius * Math.cos(angle); const endY = y + radius * Math.sin(angle); sendDrawCommand(startX, startY, endX, endY, linesThickness, color); } } function startLinesAnimation() { if (linesAnimationInterval) return; linesAnimationInterval = setInterval(() => { linesRadius += 0.01; if (linesRadius > 0.5) { clearInterval(linesAnimationInterval); linesAnimationInterval = null; return; } drawLines(linesCenterX, linesCenterY, linesRadius, linesColor); }, 90); // Increase the interval to reduce the load on the server } function stopLinesAnimation() { if (linesAnimationInterval) { clearInterval(linesAnimationInterval); linesAnimationInterval = null; } } // Triangle Animation let triangleAnimationInterval; let triangleColor = '#000000'; let triangleSize = 0; const triangleCenterX = 0.5; const triangleCenterY = 0.5; const triangleThickness = 5; // Thickness of the triangle lines function drawTriangle(x, y, size, color) { const points = [ { x: x, y: y - size }, { x: x - size, y: y + size }, { x: x + size, y: y + size } ]; sendDrawCommand(points[0].x, points[0].y, points[1].x, points[1].y, triangleThickness, color); sendDrawCommand(points[1].x, points[1].y, points[2].x, points[2].y, triangleThickness, color); sendDrawCommand(points[2].x, points[2].y, points[0].x, points[0].y, triangleThickness, color); } function startTriangleAnimation() { if (triangleAnimationInterval) return; triangleAnimationInterval = setInterval(() => { triangleSize += 0.01; if (triangleSize > 0.5) { clearInterval(triangleAnimationInterval); triangleAnimationInterval = null; return; } drawTriangle(triangleCenterX, triangleCenterY, triangleSize, triangleColor); }, 120); // Increase the interval to reduce the load on the server } function stopTriangleAnimation() { if (triangleAnimationInterval) { clearInterval(triangleAnimationInterval); triangleAnimationInterval = null; } } // Square Animation let squareAnimationInterval; let squareColor = '#000000'; let squareSize = 0; const squareCenterX = 0.5; const squareCenterY = 0.5; const squareThickness = 5; // Thickness of the square lines function drawSquare(x, y, size, color) { const halfSize = size / 2; const points = [ { x: x - halfSize, y: y - halfSize }, { x: x + halfSize, y: y - halfSize }, { x: x + halfSize, y: y + halfSize }, { x: x - halfSize, y: y + halfSize } ]; sendDrawCommand(points[0].x, points[0].y, points[1].x, points[1].y, squareThickness, color); sendDrawCommand(points[1].x, points[1].y, points[2].x, points[2].y, squareThickness, color); sendDrawCommand(points[2].x, points[2].y, points[3].x, points[3].y, squareThickness, color); sendDrawCommand(points[3].x, points[3].y, points[0].x, points[0].y, squareThickness, color); } function startSquareAnimation() { if (squareAnimationInterval) return; squareAnimationInterval = setInterval(() => { squareSize += 0.02; if (squareSize > 1) { clearInterval(squareAnimationInterval); squareAnimationInterval = null; return; } drawSquare(squareCenterX, squareCenterY, squareSize, squareColor); }, 120); // Increase the interval to reduce the load on the server } function stopSquareAnimation() { if (squareAnimationInterval) { clearInterval(squareAnimationInterval); squareAnimationInterval = null; } } // Diamond Animation let diamondAnimationInterval; let diamondColor = '#000000'; let diamondSize = 0; const diamondCenterX = 0.5; const diamondCenterY = 0.5; const diamondThickness = 5; // Thickness of the diamond lines function drawDiamond(x, y, size, color) { const points = [ { x: x, y: y - size }, { x: x + size, y: y }, { x: x, y: y + size }, { x: x - size, y: y } ]; sendDrawCommand(points[0].x, points[0].y, points[1].x, points[1].y, diamondThickness, color); sendDrawCommand(points[1].x, points[1].y, points[2].x, points[2].y, diamondThickness, color); sendDrawCommand(points[2].x, points[2].y, points[3].x, points[3].y, diamondThickness, color); sendDrawCommand(points[3].x, points[3].y, points[0].x, points[0].y, diamondThickness, color); } function startDiamondAnimation() { if (diamondAnimationInterval) return; diamondAnimationInterval = setInterval(() => { diamondSize += 0.01; if (diamondSize > 0.5) { clearInterval(diamondAnimationInterval); diamondAnimationInterval = null; return; } drawDiamond(diamondCenterX, diamondCenterY, diamondSize, diamondColor); }, 120); // Increase the interval to reduce the load on the server } function stopDiamondAnimation() { if (diamondAnimationInterval) { clearInterval(diamondAnimationInterval); diamondAnimationInterval = null; } } // Heart Animation let heartAnimationInterval; let heartColor = '#000000'; let heartSize = 0; const heartCenterX = 0.5; const heartCenterY = 0.5; const heartThickness = 5; // Thickness of the heart lines function drawHeart(x, y, size, color) { const points = [ { x: x, y: y - size }, { x: x - size, y: y - size }, { x: x - size, y: y + size }, { x: x, y: y + 2 * size }, { x: x + size, y: y + size }, { x: x + size, y: y - size } ]; sendDrawCommand(points[0].x, points[0].y, points[1].x, points[1].y, heartThickness, color); sendDrawCommand(points[1].x, points[1].y, points[2].x, points[2].y, heartThickness, color); sendDrawCommand(points[2].x, points[2].y, points[3].x, points[3].y, heartThickness, color); sendDrawCommand(points[3].x, points[3].y, points[4].x, points[4].y, heartThickness, color); sendDrawCommand(points[4].x, points[4].y, points[5].x, points[5].y, heartThickness, color); sendDrawCommand(points[5].x, points[5].y, points[0].x, points[0].y, heartThickness, color); } function startHeartAnimation() { if (heartAnimationInterval) return; heartAnimationInterval = setInterval(() => { heartSize += 0.01; if (heartSize > 0.5) { clearInterval(heartAnimationInterval); heartAnimationInterval = null; return; } drawHeart(heartCenterX, heartCenterY, heartSize, heartColor); }, 120); // Increase the interval to reduce the load on the server } function stopHeartAnimation() { if (heartAnimationInterval) { clearInterval(heartAnimationInterval); heartAnimationInterval = null; } } // Moon Animation let moonAnimationInterval; let moonColor = '#000000'; let moonSize = 0; const moonCenterX = 0.5; const moonCenterY = 0.5; const moonThickness = 5; // Thickness of the moon lines function drawMoon(x, y, size, color) { const circleRadius = size; const innerCircleRadius = size * 0.8; // Draw the outer circle for (let i = 0; i < 360; i += 30) { const angle1 = i * (Math.PI / 180); const angle2 = (i + 30) * (Math.PI / 180); const startX = x + circleRadius * Math.cos(angle1); const startY = y + circleRadius * Math.sin(angle1); const endX = x + circleRadius * Math.cos(angle2); const endY = y + circleRadius * Math.sin(angle2); sendDrawCommand(startX, startY, endX, endY, moonThickness, color); } // Draw the inner circle (to create the crescent shape) for (let i = 180; i < 360; i += 30) { const angle1 = i * (Math.PI / 180); const angle2 = (i + 30) * (Math.PI / 180); const startX = x + innerCircleRadius * Math.cos(angle1); const startY = y + innerCircleRadius * Math.sin(angle1); const endX = x + innerCircleRadius * Math.cos(angle2); const endY = y + innerCircleRadius * Math.sin(angle2); sendDrawCommand(startX, startY, endX, endY, moonThickness, 'white'); // Use white color for the inner circle } } function startMoonAnimation() { if (moonAnimationInterval) return; moonAnimationInterval = setInterval(() => { moonSize += 0.01; if (moonSize > 0.5) { clearInterval(moonAnimationInterval); moonAnimationInterval = null; return; } drawMoon(moonCenterX, moonCenterY, moonSize, moonColor); }, 120); // Increase the interval to reduce the load on the server } function stopMoonAnimation() { if (moonAnimationInterval) { clearInterval(moonAnimationInterval); moonAnimationInterval = null; } } // Pinwheel Animation let pinwheelAnimationInterval; let pinwheelColor = '#000000'; let pinwheelSize = 0; const pinwheelCenterX = 0.5; const pinwheelCenterY = 0.5; const pinwheelThickness = 5; // Thickness of the pinwheel lines function drawPinwheel(x, y, size, color) { const points = [ { x: x, y: y }, { x: x + size, y: y }, { x: x, y: y + size }, { x: x - size, y: y }, { x: x, y: y - size } ]; sendDrawCommand(points[0].x, points[0].y, points[1].x, points[1].y, pinwheelThickness, color); sendDrawCommand(points[0].x, points[0].y, points[2].x, points[2].y, pinwheelThickness, color); sendDrawCommand(points[0].x, points[0].y, points[3].x, points[3].y, pinwheelThickness, color); sendDrawCommand(points[0].x, points[0].y, points[4].x, points[4].y, pinwheelThickness, color); } function startPinwheelAnimation() { if (pinwheelAnimationInterval) return; pinwheelAnimationInterval = setInterval(() => { pinwheelSize += 0.01; if (pinwheelSize > 0.5) { clearInterval(pinwheelAnimationInterval); pinwheelAnimationInterval = null; return; } drawPinwheel(pinwheelCenterX, pinwheelCenterY, pinwheelSize, pinwheelColor); }, 120); // Increase the interval to reduce the load on the server } function stopPinwheelAnimation() { if (pinwheelAnimationInterval) { clearInterval(pinwheelAnimationInterval); pinwheelAnimationInterval = null; } } // Explosion Animation let explosionAnimationInterval; let explosionColor = '#000000'; let explosionSize = 0; const explosionCenterX = 0.5; const explosionCenterY = 0.5; const explosionThickness = 5; // Thickness of the explosion lines function drawExplosion(x, y, size, color) { const points = [ { x: x, y: y }, { x: x + size, y: y + size }, { x: x - size, y: y + size }, { x: x - size, y: y - size }, { x: x + size, y: y - size }, { x: x, y: y + size }, { x: x, y: y - size } ]; sendDrawCommand(points[0].x, points[0].y, points[1].x, points[1].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[2].x, points[2].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[3].x, points[3].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[4].x, points[4].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[5].x, points[5].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[6].x, points[6].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[7].x, points[7].y, explosionThickness, color); sendDrawCommand(points[0].x, points[0].y, points[8].x, points[8].y, explosionThickness, color); } function startExplosionAnimation() { if (explosionAnimationInterval) return; explosionAnimationInterval = setInterval(() => { explosionSize += 0.01; if (explosionSize > 0.5) { clearInterval(explosionAnimationInterval); explosionAnimationInterval = null; return; } drawExplosion(explosionCenterX, explosionCenterY, explosionSize, explosionColor); }, 120); // Increase the interval to reduce the load on the server } function stopExplosionAnimation() { if (explosionAnimationInterval) { clearInterval(explosionAnimationInterval); explosionAnimationInterval = null; } } // Multicolor Animation let multicolorInterval; let multicolorEnabled = false; function getRandomColor() { const letters = '0123456789ABCDEF'; let color = '#'; for (let i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; } function startMulticolorAnimation() { if (multicolorInterval) return; multicolorInterval = setInterval(() => { circleColor = getRandomColor(); linesColor = getRandomColor(); triangleColor = getRandomColor(); squareColor = getRandomColor(); diamondColor = getRandomColor(); heartColor = getRandomColor(); moonColor = getRandomColor(); pinwheelColor = getRandomColor(); explosionColor = getRandomColor(); }, 100); // Change colors every 100ms } function stopMulticolorAnimation() { if (multicolorInterval) { clearInterval(multicolorInterval); multicolorInterval = null; multicolorEnabled = false; } } function resetAnimation() { stopCircleAnimation(); stopLinesAnimation(); stopTriangleAnimation(); stopSquareAnimation(); stopDiamondAnimation(); stopHeartAnimation(); stopMoonAnimation(); stopPinwheelAnimation(); stopExplosionAnimation(); stopMulticolorAnimation(); circleRadius = 0; linesRadius = 0; triangleSize = 0; squareSize = 0; diamondSize = 0; heartSize = 0; moonSize = 0; pinwheelSize = 0; explosionSize = 0; colorInput.value = '#000000'; circleColor = '#000000'; linesColor = '#000000'; triangleColor = '#000000'; squareColor = '#000000'; diamondColor = '#000000'; heartColor = '#000000'; moonColor = '#000000'; pinwheelColor = '#000000'; explosionColor = '#000000'; } // Event listeners for buttons startCircleButton.addEventListener('click', startCircleAnimation); startLinesButton.addEventListener('click', startLinesAnimation); startTriangleButton.addEventListener('click', startTriangleAnimation); startSquareButton.addEventListener('click', startSquareAnimation); startDiamondButton.addEventListener('click', startDiamondAnimation); startHeartButton.addEventListener('click', startHeartAnimation); startMoonButton.addEventListener('click', startMoonAnimation); startPinwheelButton.addEventListener('click', startPinwheelAnimation); startExplosionButton.addEventListener('click', startExplosionAnimation); startMulticolorButton.addEventListener('click', startMulticolorAnimation); stopButton.addEventListener('click', resetAnimation); // Update colors based on input colorInput.addEventListener('input', () => { circleColor = colorInput.value; linesColor = colorInput.value; triangleColor = colorInput.value; squareColor = colorInput.value; diamondColor = colorInput.value; heartColor = colorInput.value; moonColor = colorInput.value; pinwheelColor = colorInput.value; explosionColor = colorInput.value; }); // Override WebSocket.prototype.send to intercept messages const originalSend = WebSocket.prototype.send; let sockets = []; WebSocket.prototype.send = function (...args) { if (sockets.indexOf(this) === -1) { sockets.push(this); console.log('WebSocket intercepted:', this); } return originalSend.apply(this, args); }; // Make the menu draggable let isDragging = false; let offsetX, offsetY; menu.addEventListener('mousedown', (e) => { isDragging = true; offsetX = e.clientX - menu.getBoundingClientRect().left; offsetY = e.clientY - menu.getBoundingClientRect().top; menu.style.cursor = 'grabbing'; menu.style.transition = 'none'; }); document.addEventListener('mousemove', (e) => { if (isDragging) { menu.style.left = `${e.clientX - offsetX}px`; menu.style.top = `${e.clientY - offsetY}px`; } }); document.addEventListener('mouseup', () => { if (isDragging) { isDragging = false; menu.style.cursor = 'move'; menu.style.transition = 'all 0.2s'; } }); // Toggle menu visibility let isMenuOpen = false; toggle.addEventListener('click', () => { isMenuOpen = !isMenuOpen; menuContent.classList.toggle('open', isMenuOpen); toggle.textContent = isMenuOpen ? '▲' : '▼'; }); // Wait for the page to load, then add the menu window.addEventListener('load', () => { document.body.appendChild(menu); }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址