您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
better FPS unlocker and counter
当前为
// ==UserScript== // @name FPS and Ping Counter // @namespace http://tampermonkey.net/ // @version 3.1 // @description better FPS unlocker and counter // @author kyu // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; var fpsCounter = document.createElement('div'); fpsCounter.style.position = 'fixed'; fpsCounter.style.top = '0px'; fpsCounter.style.left = '0px'; fpsCounter.style.backgroundColor = 'rgba(255, 128, 0, 0.5)'; fpsCounter.style.color = 'white'; fpsCounter.style.padding = '5px'; fpsCounter.style.fontSize = '12px'; fpsCounter.style.borderRadius = '5px'; fpsCounter.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; fpsCounter.textContent = 'FPS: 0'; var pingCounter = document.createElement('div'); pingCounter.style.position = 'fixed'; pingCounter.style.top = '20px'; pingCounter.style.left = '0px'; pingCounter.style.backgroundColor = 'rgba(0, 128, 255, 0.5)'; pingCounter.style.color = 'white'; pingCounter.style.padding = '5px'; pingCounter.style.fontSize = '12px'; pingCounter.style.borderRadius = '5px'; pingCounter.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; pingCounter.textContent = 'Ping: 0ms'; document.body.appendChild(fpsCounter); document.body.appendChild(pingCounter); var menuButton = document.createElement('button'); menuButton.style.position = 'fixed'; menuButton.style.top = '0px'; menuButton.style.right = '0px'; menuButton.style.backgroundColor = 'rgba(255, 255, 255, 0.5)'; menuButton.style.color = 'black'; menuButton.style.padding = '5px'; menuButton.style.fontSize = '12px'; menuButton.style.borderRadius = '5px'; menuButton.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; menuButton.textContent = 'Menu'; document.body.appendChild(menuButton); var menu = document.createElement('div'); menu.style.position = 'fixed'; menu.style.top = '50%'; menu.style.left = '50%'; menu.style.transform = 'translate(-50%, -50%)';menu.style.backgroundColor = 'rgba(255, 255, 255, 0.5)'; menu.style.color = 'black'; menu.style.padding = '10px'; menu.style.fontSize = '12px'; menu.style.borderRadius = '5px'; menu.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; menu.style.display = 'none'; var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.checked = true; menu.appendChild(checkbox); var label = document.createElement('label'); label.textContent = 'Enable counters'; menu.appendChild(label); var optimizationCheckbox = document.createElement('input'); optimizationCheckbox.type = 'checkbox'; optimizationCheckbox.checked = true; menu.appendChild(optimizationCheckbox); var optimizationLabel = document.createElement('label'); optimizationLabel.textContent = 'Optimize'; menu.appendChild(optimizationLabel); menuButton.addEventListener('click', function() { if (menu.style.display === 'none') { menu.style.display = 'block'; } else { menu.style.display = 'none'; } }); checkbox.addEventListener('change', function() { if (checkbox.checked) { fpsCounter.style.display = 'block'; pingCounter.style.display = 'block'; } else { fpsCounter.style.display = 'none'; pingCounter.style.display = 'none'; } }); optimizationCheckbox.addEventListener('change', function() { if (optimizationCheckbox.checked) { // Optimize page var images = document.querySelectorAll('img'); for (var i = 0; i < images.length; i++) { images[i].src = ''; } var scripts = document.querySelectorAll('script'); for (var i = 0; i < scripts.length; i++) { scripts[i].remove(); } } else { // Deoptimize page //... } }); // Make counters draggable fpsCounter.addEventListener('mousedown', function(event) { fpsCounter.style.position = 'absolute'; fpsCounter.style.zIndex = '1000'; document.addEventListener('mousemove', function(event) { fpsCounter.style.top = event.clientY + 'px'; fpsCounter.style.left = event.clientX + 'px'; }); document.addEventListener('mouseup', function() { fpsCounter.style.position = 'fixed'; }); }); pingCounter.addEventListener('mousedown', function(event) { pingCounter.style.position = 'absolute'; pingCounter.style.zIndex = '1000'; document.addEventListener('mousemove', function(event) { pingCounter.style.top = event.clientY + 'px'; pingCounter.style.left = event.clientX + 'px'; }); document.addEventListener('mouseup', function() { pingCounter.style.position = 'fixed'; }); }); // Bypass to always appear on any page document.addEventListener('DOMContentLoaded', function() { if (document.body.style.overflow!== 'hidden') { document.body.style.overflow = 'hidden'; } }); // Update FPS and ping counters var fps = 0; var ping = 0; var lastFrameTime = performance.now(); function updateFPS() { var currentFrameTime = performance.now(); fps = Math.round(1000 / (currentFrameTime - lastFrameTime)); lastFrameTime = currentFrameTime; fpsCounter.textContent = 'FPS: ' + fps; } function updatePing() { var startTime = performance.now(); var xhr = new XMLHttpRequest(); xhr.open('GET', location.href, true); xhr.onload = function() { ping = Math.round(performance.now() - startTime); pingCounter.textContent = 'Ping: ' + ping + 'ms'; }; xhr.send(); } setInterval(updateFPS, 1000 / 60); // update FPS every 16ms (60fps) setInterval(updatePing, 1000); // update ping every 1s document.body.appendChild(menu); })();