Друкарня від WE.UA

Скрипт для зручного читання манги, що збільшує картинки

AI !Публікація містить зображення, або фрагменти тексту, створені за допомогою штучного інтелекту

Звісно, цей скрипт не обмежується мангою, він працює із будь-якими “неприхованими” картинками, але від початку я згенерував його для зручнішого читання манги на сайті, де скани не розтягувалися пропорційно за шириною екрану, а подавалися просто по висоті, отже, роздивитися деталі на моніторі, прочитати текст, без лупи практично неможливо.

Зауваж: скрипт від початку й до кінця згенеровано штучним роботом.

Як працює скрипт?

Навівши курсор миші на картинку і натиснувши 3-тю кнопку миші (коліщатко) — скрипт розгортає зображення під курсором у зовнішньому DIV на увесь екран, себто на увесь доступний в бравзері простір, водночас картинка розтягується пропорційно — заповнює увесь доступний простір без спотворень, новий простір прокручується.

Як користуватися?

Скрипт тестувався тільки у Firefox, працює через перевірений додаток Violentmonkey (Tampermonkey) для запуску довільних скриптів, тобто для роботи скрипта (javascript) передовсім необхідно встановити вказаний додаток, затим додати в нього скрипт (натиснути на плюсик і скопіпастити скрипт, зберегти та закрити). Тоді скрипт буде активним на всіх сайтах.

Зауваж, що скрипт спрацьовує не завжди, бувають проблеми із намальованим в canvas, і загалом сьогодні чимало сайтів використовують різні засоби захисту контенту від копіювання, тому зважаємо на це.

Якщо ти звиклий до розкривання посилань коліщатком миші, спробуй новий спосіб: затиснувши Ctrl клікай по посиланню ЛКМ, або вимикай додаток на конкретних сайтах.

// ==UserScript==
// @name         Пропорційне збільшення манги (Універсальний Canvas Клон)
// @namespace    http://tampermonkey.net/
// @version      1.7
// @description  Ідеально розгортає і звичайні IMG, і захищені CANVAS по ширині екрана
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let currentHoveredElement = null;
    let overlay = null;

    // Стежимо за мишкою
    document.addEventListener('mouseover', function(e) {
        currentHoveredElement = e.target;
    }, true);

    // Слухаємо клік коліщатком миші
    document.addEventListener('mousedown', function(e) {
        if (e.button === 1) { // Середня кнопка (коліщатко)

            if (overlay) {
                e.preventDefault();
                closeOverlay();
                return;
            }

            if (currentHoveredElement) {
                // Шукаємо сам об'єкт (IMG або CANVAS)
                let sourceElement = findVisualElement(currentHoveredElement);

                if (sourceElement) {
                    e.preventDefault();
                    openOverlayWithElement(sourceElement);
                } else {
                    console.log('Скрипт не знайшов елемента для збільшення:', currentHoveredElement);
                }
            }
        }
    });

    // Функція пошуку: визначаємо, де картинка чи канвас
    function findVisualElement(el) {
        if (el.tagName === 'IMG' || el.tagName === 'CANVAS') return el;

        // Якщо навели на блок-обгортку, перевіряємо що всередині
        let found = el.querySelector('img, canvas');
        if (found) return found;

        // Перевіряємо найближчого сусіда (всередині слайдерів бувають прозорі клік-панелі поверх)
        let parent = el.parentElement;
        if (parent) {
            let siblingFound = parent.querySelector('img, canvas');
            if (siblingFound) return siblingFound;
        }

        return null;
    }

    function openOverlayWithElement(sourceEl) {
        // Створюємо контейнер-оверлей із робочим скролом для Firefox
        overlay = document.createElement('div');
        overlay.style.position = 'fixed';
        overlay.style.top = '0';
        overlay.style.left = '0';
        overlay.style.width = '100vw';
        overlay.style.height = '100vh';
        overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.98)';
        overlay.style.zIndex = '99999999';
        overlay.style.overflowY = 'scroll';
        overlay.style.overflowX = 'hidden';
        overlay.style.scrollbarWidth = 'none';
        overlay.style.display = 'block';

        let displayElement;

        if (sourceEl.tagName === 'CANVAS') {
            // МАГІЯ ДЛЯ CANVAS: Замість читання тексту base64, ми створюємо новий порожній canvas...
            displayElement = document.createElement('canvas');
            displayElement.width = sourceEl.width;
            displayElement.height = sourceEl.height;

            // ...і копіюємо в нього графічні дані безпосередньо з оригінального канвасу!
            let ctx = displayElement.getContext('2d');
            ctx.drawImage(sourceEl, 0, 0);
        } else {
            // ДЛЯ ЗВИЧАЙНИХ IMG: Просто копіюємо тег зі збереженням посилання
            displayElement = document.createElement('img');
            displayElement.src = sourceEl.src;
        }

        // Задаємо однакові стилі відображення (на всю ширину вікна, висота пропорційна)
        displayElement.style.width = '100vw';
        displayElement.style.height = 'auto';
        displayElement.style.display = 'block';

        overlay.appendChild(displayElement);
        document.body.appendChild(overlay);

        // Блокуємо фоновий скрол сайту
        document.body.style.overflow = 'hidden';

        // Закриття правою кнопкою миші
        overlay.addEventListener('contextmenu', function(e) {
            e.preventDefault();
            closeOverlay();
        });
    }

    function closeOverlay() {
        if (overlay) {
            overlay.remove();
            overlay = null;
            document.body.style.overflow = '';
        }
    }
})();

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Іво Сайвс
Іво Сайвс@ivo_sives

I run with scissors

62Довгочити
2.7KПерегляди
13Підписники
Підтримати
На Друкарні з 1 липня 2024

Більше від автора

Це також може зацікавити:

  • java training near me

    In today’s competitive IT world, mastering Java and Full Stack Development opens doors to a wide range of career opportunities. At V Cube Software Solutions, we offer the Best Full Stack Developer Course in KPHB, designed for aspiring developers who want to

    Теми цього довгочиту:

    Java
  • Сортування штук у V8 (переклад, Симон Зюнд, 28.09.2018)

    Метод Array.prototype.sort був серед останніх вбудованих можливостей, реалізованих у власному JavaScript усередині V8. Перенесення його дало нам змогу експериментувати з різними алгоритмами та стратегіями реалізації та, нарешті, зробити його стабільним у V8 v7.0 і Chrome 70.

    Теми цього довгочиту:

    Javascript
  • Мій досвід замовлення манги українською

    Хочу поділитися своїми враженнями після замовлення манги українською мовою на сайті https://geekach.com.ua/komiksy/manga/. Якщо коротко — давно не був настільки задоволений покупкою онлайн.

    Теми цього довгочиту:

    Манґа

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • java training near me

    In today’s competitive IT world, mastering Java and Full Stack Development opens doors to a wide range of career opportunities. At V Cube Software Solutions, we offer the Best Full Stack Developer Course in KPHB, designed for aspiring developers who want to

    Теми цього довгочиту:

    Java
  • Сортування штук у V8 (переклад, Симон Зюнд, 28.09.2018)

    Метод Array.prototype.sort був серед останніх вбудованих можливостей, реалізованих у власному JavaScript усередині V8. Перенесення його дало нам змогу експериментувати з різними алгоритмами та стратегіями реалізації та, нарешті, зробити його стабільним у V8 v7.0 і Chrome 70.

    Теми цього довгочиту:

    Javascript
  • Мій досвід замовлення манги українською

    Хочу поділитися своїми враженнями після замовлення манги українською мовою на сайті https://geekach.com.ua/komiksy/manga/. Якщо коротко — давно не був настільки задоволений покупкою онлайн.

    Теми цього довгочиту:

    Манґа