Furry34 Blur

The blur is removed individually when pointing or playing a video, without interfering with the viewing.

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

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

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         Furry34 Blur
// @name:ru      Furry34 Размытие
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  The blur is removed individually when pointing or playing a video, without interfering with the viewing.
// @description:ru  Размытие снимается индивидуально при наведении или воспроизведении видео, не мешая просмотру.
// @author       scody
// @license      MIT
// @match        *://furry34.com/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const style = document.createElement('style');
    style.textContent = `
        .blurred-media {
            filter: blur(18px);
            transition: filter 0.2s ease-in-out;
            position: relative;
            cursor: pointer;
        }

        .blurred-media.revealed {
            filter: none !important;
        }
    `;
    document.head.appendChild(style);

    function applySimpleBlur(el) {
        el.classList.add('blurred-media');

        const isVideo = el.tagName.toLowerCase() === 'video';

        if (isVideo) {
            el.setAttribute('preload', 'metadata');
        }

        el.addEventListener('mouseenter', () => {
            if (!isVideo || el.paused) {
                el.classList.add('revealed');
            }
        });

        el.addEventListener('mouseleave', () => {
            if (!isVideo || el.paused) {
                el.classList.remove('revealed');
            }
        });

        if (isVideo) {
            el.addEventListener('play', () => {
                el.classList.add('revealed');
            });

            el.addEventListener('pause', () => {
                el.classList.remove('revealed');
            });

            el.addEventListener('ended', () => {
                el.classList.remove('revealed');
            });
        }
    }

    function processAll() {
        const imgs = document.querySelectorAll('img:not([data-blur-applied])');
        const vids = document.querySelectorAll('video:not([data-blur-applied])');

        imgs.forEach(img => {
            img.setAttribute('data-blur-applied', 'true');
            applySimpleBlur(img);
        });

        vids.forEach(video => {
            video.setAttribute('data-blur-applied', 'true');
            applySimpleBlur(video);

            if (!video.paused && !video.ended && video.readyState > 2) {
                video.classList.add('revealed');
            }
        });
    }

    const observer = new MutationObserver(processAll);
    observer.observe(document.body, { childList: true, subtree: true });

    processAll();
})();