Slow Motion

Slow down

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

// ==UserScript==
// @name         Slow Motion
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Slow down
// @author       KukuModz
// @match        *://*/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    let slowFactor = 5; // Change this number to slow down more (5x slower)
    let slowMode = false;

    // Create control panel
    const panel = document.createElement('div');
    panel.style.position = 'fixed';
    panel.style.top = '10px';
    panel.style.right = '10px';
    panel.style.padding = '10px';
    panel.style.backgroundColor = 'rgba(0,0,0,0.7)';
    panel.style.color = 'white';
    panel.style.zIndex = '1000000';
    panel.style.borderRadius = '5px';
    panel.style.fontFamily = 'Arial, sans-serif';
    panel.style.cursor = 'pointer';
    panel.textContent = 'Enable Slow Motion';
    document.body.appendChild(panel);

    panel.addEventListener('click', () => {
        slowMode = !slowMode;
        panel.textContent = slowMode ? 'Disable Slow Motion' : 'Enable Slow Motion';
        if (slowMode) enableSlowMotion();
        else disableSlowMotion();
    });

    // Store original functions
    const origSetTimeout = window.setTimeout;
    const origSetInterval = window.setInterval;
    const origRequestAnimationFrame = window.requestAnimationFrame;

    let rafMap = new Map();

    function enableSlowMotion() {
        // Slow down setTimeout
        window.setTimeout = function(fn, delay, ...args) {
            return origSetTimeout(fn, delay * slowFactor, ...args);
        };

        // Slow down setInterval
        window.setInterval = function(fn, delay, ...args) {
            return origSetInterval(fn, delay * slowFactor, ...args);
        };

        // Slow down requestAnimationFrame
        window.requestAnimationFrame = function(fn) {
            return origRequestAnimationFrame(timestamp => {
                origSetTimeout(() => fn(timestamp), (1000 / 60) * (slowFactor - 1));
            });
        };

        // Slow down CSS animations
        document.querySelectorAll('*').forEach(el => {
            el.style.animationDuration = getComputedStyle(el).animationDuration.replace('s', '') * slowFactor + 's';
            el.style.transitionDuration = getComputedStyle(el).transitionDuration.replace('s', '') * slowFactor + 's';
        });
    }

    function disableSlowMotion() {
        // Restore original functions
        window.setTimeout = origSetTimeout;
        window.setInterval = origSetInterval;
        window.requestAnimationFrame = origRequestAnimationFrame;

        // Restore CSS animations/transitions
        document.querySelectorAll('*').forEach(el => {
            el.style.animationDuration = '';
            el.style.transitionDuration = '';
        });
    }

})();