您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Animate Triple, Double and Bull hits
// ==UserScript== // @name Animate Triple Autodarts // @version 0.4 // @description Animate Triple, Double and Bull hits // @author aMAZiNGJiN // @match *://play.autodarts.io/* // @grant none // @license MIT // @namespace https://greasyfork.org/users/1275557 // ==/UserScript== (function() { 'use strict'; // Settings const triplesToAnimate = [20, 19, 18, 17, 16, 15]; // Add the triples you like to animate const doublesToAnimate = [20, 16, 12, 8, 4, 1]; // Add the doubles you like to animate const animateBull = true; // Enable or disable the bull animation function injectCSS() { const css = ` .highlight { color: red; font-weight: bold; } .animate-hit { border: unset; outline: unset; position: relative; color: #fff; font-size: 20px; font-weight: 400; letter-spacing: 2px; word-spacing: 4px; text-transform: uppercase; background: linear-gradient(270deg, #0ebeff, #ffdd40, #ae63e4, #47cf73, #0ebeff, #ffdd40, #ae63e4, #47cf73); animation: rainbow-border 5s ease-in-out infinite; background-size: 400% 400%; z-index: 1; } .animate-hit::before, .glowing-border::after { content: ""; position: absolute; inset: 0; z-index: -1; } .animate-hit::before { animation: rainbow-border 5s ease-in-out infinite; border-radius: 4px; background: linear-gradient(270deg, #0ebeff, #ffdd40, #ae63e4, #47cf73, #0ebeff, #ffdd40, #ae63e4, #47cf73); width: 100%; height: 100%; background-size: 400% 400%; } .animate-hit::after { border-radius: 3px; margin: 3px; background: inherit; } @keyframes rainbow-border { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } `; const style = document.createElement('style'); style.type = 'text/css'; style.textContent = css; document.head.appendChild(style); } function animateHits() { document.querySelectorAll('.ad-ext-turn-throw p.chakra-text').forEach(pElement => { let shouldAnimate = false; let prefix = ''; let hitNumber = 0; if (pElement.textContent.startsWith('T')) { prefix = 'T'; hitNumber = parseInt(pElement.textContent.slice(1), 10); shouldAnimate = triplesToAnimate.includes(hitNumber); } else if (pElement.textContent.startsWith('D')) { prefix = 'D'; hitNumber = parseInt(pElement.textContent.slice(1), 10); shouldAnimate = doublesToAnimate.includes(hitNumber); } else if (animateBull && pElement.textContent === 'BULL') { shouldAnimate = true; } if (shouldAnimate) { const parentDiv = pElement.closest('.ad-ext-turn-throw'); if (parentDiv) { parentDiv.classList.add('animate-hit'); if (prefix && !pElement.innerHTML.includes('<span class="highlight">')) { const updatedHTML = pElement.textContent.replace(new RegExp(`^${prefix}`), `<span class="highlight">${prefix}</span>`); pElement.innerHTML = updatedHTML; } else if (pElement.textContent === 'BULL' && !pElement.innerHTML.includes('<span class="highlight">')) { pElement.innerHTML = '<span class="">BULL</span>'; } } } }); } const observer = new MutationObserver(mutationsList => { let isRelevantMutation = mutationsList.some(mutation => Array.from(mutation.addedNodes).some(node => node.nodeType === Node.ELEMENT_NODE && (node.matches('.chakra-text') || node.querySelector('.chakra-text')) ) ); if (isRelevantMutation) { animateHits(); } }); function periodicCheck() { animateHits(); } window.onload = () => { injectCSS(); animateHits(); observer.observe(document.body, { childList: true, subtree: true, characterData: true }); setInterval(periodicCheck, 3000); }; })();