...

Виджет iro Color picker

Тема в разделе "Примеры решений и дополнительных модулей", создана пользователем Valentin Lysenko, 13 апр 2025 в 11:50.

  1. Valentin Lysenko

    Valentin Lysenko Участник

    Добавил удобный цветовой пикер на основе библиотеки с iro.js.
    Возможности:
    • Выбор цвета в разных форматах (HEX, RGB, HSL)
    • Простая интеграция
    [​IMG]
    Спойлер: Виджет Код
    Код:
    
    <!DOCTYPE html>
    <
    html lang="en">
    <
    head>
        <
    meta charset="UTF-8">
        <
    meta name="viewport" content="width=device-width, initial-scale=1.0">
        <
    title>iro.js Color Picker Demo</title>
        <!-- Include 
    iro.js from CDN -->
        <
    style>
            
    #color-picker-container {
                
    margin20px 0;
            }
            
    #color-values {
                
    margin-top20px;
                
    padding15px;
                
    background#f5f5f5;
                
    border-radius5px;
                
    /* width: 300px; */
            
    }
            .
    picker_body {
                
    width300px;
            }
            .
    picker_body h1 {
                
    text-aligncenter;
            }
        </
    style>
    </
    head>
    <
    body>
        <
    div class='picker_body'>
            <
    h1>Color Picker</h1>
            <
    div id="color-picker-container"></div>
            <
    div id="color-values">
                <
    p>Selected Color:</p>
                <
    p>Hex: <span id="hex-value"></span></p>
                <
    p>RGB: <span id="rgb-value"></span></p>
                <
    p>HSL: <span id="hsl-value"></span></p>
            </
    div>
        </
    div>
    </
    body>
    </
    html>

    Спойлер: Клиентский сценарий
    Код:
    
    declare const documentany;
    declare const 
    consoleany;

    import iro from "iro.min.js";

    interface 
    ColorPickerOptions {
        
    widthnumber;
        
    colorstring;
        
    borderWidthnumber;
        
    borderColorstring;
        
    layout: Array<{
            
    componentany;
            
    optionsany;
        }>;
    }

    interface 
    IroColor {
        
    hexStringstring;
        
    rgb: {
            
    rnumber;
            
    gnumber;
            
    bnumber;
        };
        
    hsl: {
            
    hnumber;
            
    snumber;
            
    lnumber;
        };
    }

    async function onRender(): Promise<void> {
        
    setPicker()
    }

    async function setPicker(): Promise<void> {

        const 
    colorPickerOptionsColorPickerOptions = {
            
    width300,
            
    color"#ff0000",
            
    borderWidth1,
            
    borderColor"#fff",
            
    layout: [
                {
                    
    componentiro.ui.Wheel,
                    
    options: {}
                },
                {
                    
    componentiro.ui.Slider,
                    
    options: {}
                },
                {
                    
    componentiro.ui.Slider,
                    
    options: {
                        
    sliderType'hue'
                    
    }
                }
            ]
        };

        const 
    colorPicker = new iro.ColorPicker('#color-picker-container'colorPickerOptions);
        
    // Записываем в контекст. Далее работаем с ним
        
    Context.data.colorPicker colorPicker

        
    // Навешиваем обработчик событий
        
    addListener()
    }


    // Обработчик события клика
    function addListener(): void {
        
    let colorPicker document.getElementById('color-picker-container')
        
    colorPicker.addEventListener('click', function() {
            
    updateColorDisplay(Context.data.colorPicker.color);
        });
    }

    // Функция обновления цветов
    function updateColorDisplay(colorIroColor): void {
        
    //Находим элементы
        
    const hexValue document.getElementById('hex-value');
        const 
    rgbValue document.getElementById('rgb-value');
        const 
    hslValue document.getElementById('hsl-value');
        const 
    colorValuesContainer document.getElementById('color-values');

        if (!
    hexValue || !rgbValue || !hslValue || !colorValuesContainer) {
            
    console.error('One or more DOM elements not found');
            return;
        }

        
    // Обновляем значения кодировок
        
    hexValue.textContent color.hexString;
        
    rgbValue.textContent = `rgb(${color.rgb.r}${color.rgb.g}${color.rgb.b})`;
        
    hslValue.textContent = `hsl(${Math.round(color.hsl.h)}${Math.round(color.hsl.s)}%, ${Math.round(color.hsl.l)}%)`;

        
    // Меняем фон в зависимости от выбранного цвета
        
    colorValuesContainer.style.backgroundColor color.hexString;

        
    // Меняем цвет текста для лучшего восприятия
        
    const brightnessnumber = (color.rgb.299 color.rgb.587 color.rgb.114) / 1000;
        
    colorValuesContainer.style.color brightness 128 '#000' '#fff';
    }

    Вложения:

    Последнее редактирование: 13 апр 2025 в 12:02