Advanced zoom

Custom Bloxd Cursor

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Advanced zoom
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Custom Bloxd Cursor
// @author       You
// @match        https://bloxd.io/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bloxd.io
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Define constants for zoom levels and increment
    const minZoom = 100; // 100%
    const maxZoom = 500; // 500% (adjusted maximum zoom)
    const zoomIncrement = 20; // 20% (increased for faster zooming)

    // Initial zoom level
    let zoomLevel = 100; // 100%

    // Variable to track the color mode
    let colorMode = 'color'; // 'color' or 'bw'

    // Function to smoothly zoom the canvas
    function zoomCanvas(zoom) {
        const canvas = document.querySelector('canvas');

        if (!canvas) {
            console.error('Canvas not found.');
            return;
        }

        // Calculate the new zoom level within the allowed range
        zoomLevel = Math.min(Math.max(zoomLevel + zoom, minZoom), maxZoom);

        // Apply the zoom transformation with a smooth transition
        canvas.style.transition = 'transform 0.5s ease';
        canvas.style.transform = `scale(${zoomLevel / 100})`;

        // Update the zoom display
        zoomDisplay.textContent = `Zoom: ${zoomLevel}%`;

        // Update the settings icon position
        updateSettingsIconPosition();
    }

    // Function to handle zooming when 'F' key is pressed
    function handleZoom(event) {
        if (event.key === 'f' || event.key === 'F') {
            if (event.type === 'keydown') {
                // Zoom in when 'F' key is pressed
                zoomCanvas(zoomIncrement);
            } else if (event.type === 'keyup') {
                // Reset zoom to 100% when 'F' key is released
                zoomCanvas(100 - zoomLevel);
            }
        }
    }

    // Function to toggle color mode of the zoom box
    function toggleColorMode() {
        if (colorMode === 'color') {
            zoomDisplay.style.backgroundColor = '#000';
            zoomDisplay.style.color = '#fff';
            colorMode = 'bw';
        } else if (colorMode === 'bw') {
            zoomDisplay.style.backgroundColor = '#fff';
            zoomDisplay.style.color = '#000';
            colorMode = 'rgb';
        } else {
            // RGB mode
            zoomDisplay.style.backgroundColor = '#f00';
            zoomDisplay.style.color = '#0f0';
            colorMode = 'color';
        }
    }

    // Function to handle changing the size of the zoom box
    function changeZoomBoxSize() {
        const newSize = prompt('Enter the new size for the Zoom Box (in pixels):', zoomDisplay.style.fontSize);
        if (newSize) {
            zoomDisplay.style.fontSize = newSize + 'px';
            updateSettingsIconPosition();
        }
    }

    // Function to update the position of the settings icon
    function updateSettingsIconPosition() {
        const zoomBoxRect = zoomDisplay.getBoundingClientRect();
        settingsIcon.style.top = `${zoomBoxRect.top}px`;
        settingsIcon.style.left = `${zoomBoxRect.right + 10}px`;
    }

    // Create a box element for displaying zoom information
    const zoomDisplay = document.createElement('div');
    zoomDisplay.textContent = 'Zoom: 100%';
    zoomDisplay.style.position = 'fixed';
    zoomDisplay.style.top = '10px'; // Position at the top
    zoomDisplay.style.left = '50%'; // Position at the middle horizontally
    zoomDisplay.style.transform = 'translateX(-50%)'; // Center horizontally
    zoomDisplay.style.padding = '5px';
    zoomDisplay.style.border = '1px solid #ccc';
    zoomDisplay.style.backgroundColor = '#fff';
    zoomDisplay.style.color = '#000';
    zoomDisplay.style.zIndex = '9999';
    zoomDisplay.style.cursor = 'pointer'; // Add pointer cursor
    zoomDisplay.style.fontSize = '20px'; // Font size of the zoom box

    // Append the zoom display to the body of the page
    document.body.appendChild(zoomDisplay);

    // Add event listeners for keydown and keyup events to handle zooming with 'F' key
    window.addEventListener('keydown', handleZoom);
    window.addEventListener('keyup', handleZoom);

    // Event listener for zooming with mouse wheel
    document.addEventListener('wheel', function(event) {
        // Prevent the default scroll behavior
        event.preventDefault();

        // Determine the direction of the scroll
        const direction = event.deltaY > 0 ? -1 : 1;

        // Zoom the canvas if zooming is active
        if (event.key === 'f' || event.key === 'F') {
            if (document.hasFocus()) {
                zoomCanvas(zoomIncrement * direction);
            }
        }
    });

    // Event listener for toggling color mode on click
    zoomDisplay.addEventListener('click', toggleColorMode);

    // Create a settings icon
    const settingsIcon = document.createElement('span');
    settingsIcon.textContent = '🔧';
    settingsIcon.style.position = 'fixed';
    settingsIcon.style.zIndex = '9999';
    settingsIcon.style.cursor = 'pointer'; // Add pointer cursor
    settingsIcon.style.fontSize = '20px'; // Font size of the settings icon

    // Append the settings icon to the body of the page
    document.body.appendChild(settingsIcon);

    // Event listener for changing the size of the zoom box
    settingsIcon.addEventListener('click', changeZoomBoxSize);

    // Update the settings icon position initially
    updateSettingsIconPosition();
})();