Greasy Fork is available in English.

Snow Effect

Add a snow effect to any website

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         Snow Effect
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Add a snow effect to any website
// @author       Masahiro Abe (modified for Tampermonkey by OpenAI Assistant)
// @match        *://drrrkari.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // スタイルを挿入
    const style = document.createElement('style');
    style.textContent = `
        .snow {
            position: absolute;
            background-color: white;
            border-radius: 50%;
            z-index: 9999;
        }
    `;
    document.head.appendChild(style);

    // ATSnow クラス定義
    var ATSnow = function(vars) {
        var _self = this;
        var _snows = [];
        var _scrollHeight = 0;
        var _windowWidth = 0;
        var _windowHeight = 0;
        var _doc = document;

        var options = {
            classname: 'snow',
            count: 100,
            interval: 40,
            maxSize: 5,
            minSize: 1,
            leftMargin: 50,
            rightMargin: 50,
            bottomMargin: 30,
            maxDistance: 10,
            minDistance: 1
        };

        this.config = function(property) {
            for (var i in property) {
                if (!vars.hasOwnProperty(i)) {
                    continue;
                }
                options[i] = property[i];
            }
        };

        this.addEvent = function(eventTarget, eventName, func) {
            if (eventTarget.addEventListener) {
                eventTarget.addEventListener(eventName, func, false);
            } else if (window.attachEvent) {
                eventTarget.attachEvent('on' + eventName, function() { func.apply(eventTarget); });
            }
        };

        this.getScrollHeight = function() {
            if (_doc.documentElement.scrollHeight) {
                return _doc.documentElement.scrollHeight;
            } else {
                return _doc.body.scrollHeight;
            }
        };

        this.getRandomInt = function(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        };

        this.getWindowWidth = function() {
            return window.innerWidth || _doc.documentElement.clientWidth || _doc.body.clientWidth;
        };

        this.getWindowHeight = function() {
            return window.innerHeight || _doc.documentElement.clientHeight || _doc.body.clientHeight;
        };

        this.createSnow = function() {
            var body = _doc.body;

            for (var i = 0; i < options.count; i++) {
                var snow = _doc.createElement('div');
                snow.className = options.classname;
                var diameter = _self.getRandomInt(options.minSize, options.maxSize);
                snow.style.width = diameter + 'px';
                snow.style.height = diameter + 'px';

                _snows[i] = {};
                var snows = _snows[i];
                snows.ele = snow;
                snows.distance = _self.getRandomInt(options.minDistance, options.maxDistance);
                snows.degree = _self.getRandomInt(1, 10);
                snows.move = 0;
                snows.size = diameter;

                body.appendChild(snow);
            }
        };

        this.snowsPositionReset = function() {
            for (var i = 0; i < options.count; i++) {
                var topPosition = Math.floor(Math.random() * _scrollHeight);
                _self.snowPositionReset(_snows[i], topPosition - _scrollHeight);
            }
        };

        this.snowPositionReset = function(snow, y) {
            var leftPosition = _self.getRandomInt(options.leftMargin, _windowWidth - options.rightMargin);
            snow.ele.style.top = y + 'px';
            snow.ele.style.left = leftPosition + 'px';
            snow.x = leftPosition;
        };

        this.move = function() {
            var fall = function() {
                for (var i = 0; i < options.count; i++) {
                    var snow = _snows[i];
                    var top = parseInt(snow.ele.style.top) || 0;
                    snow.move += snow.degree;

                    if (top + snow.size >= _scrollHeight - options.bottomMargin) {
                        _self.snowPositionReset(snow, 0);
                    } else {
                        snow.ele.style.top = top + snow.size + 'px';
                        snow.ele.style.left = snow.x + Math.cos(snow.move * Math.PI / 180) * snow.distance + 'px';
                    }
                }
                setTimeout(function() { fall(); }, options.interval);
            };
            fall();
        };

        this.load = function() {
            _self.config(vars);

            _self.addEvent(window, 'load', function() {
                _scrollHeight = _self.getScrollHeight();
                _windowWidth = _self.getWindowWidth();
                _windowHeight = _self.getWindowHeight();
                _self.createSnow();
                _self.snowsPositionReset();
                _self.move();
            });

            _self.addEvent(window, 'resize', function() {
                _scrollHeight = _self.getScrollHeight();
                _windowWidth = _self.getWindowWidth();
                _windowHeight = _self.getWindowHeight();
                _self.snowsPositionReset();
            });
        };
    };

    // 雪エフェクトを起動
    var snowEffect = new ATSnow({
        count: 150, // 雪の数を変更可能
        maxSize: 8, // 雪の最大サイズ
        minSize: 2  // 雪の最小サイズ
    });
    snowEffect.load();
})();