Код:
declare const document: any;
declare const console: any;
import iro from "iro.min.js";
interface ColorPickerOptions {
width: number;
color: string;
borderWidth: number;
borderColor: string;
layout: Array<{
component: any;
options: any;
}>;
}
interface IroColor {
hexString: string;
rgb: {
r: number;
g: number;
b: number;
};
hsl: {
h: number;
s: number;
l: number;
};
}
async function onRender(): Promise<void> {
setPicker()
}
async function setPicker(): Promise<void> {
const colorPickerOptions: ColorPickerOptions = {
width: 300,
color: "#ff0000",
borderWidth: 1,
borderColor: "#fff",
layout: [
{
component: iro.ui.Wheel,
options: {}
},
{
component: iro.ui.Slider,
options: {}
},
{
component: iro.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(color: IroColor): 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 brightness: number = (color.rgb.r * 299 + color.rgb.g * 587 + color.rgb.b * 114) / 1000;
colorValuesContainer.style.color = brightness > 128 ? '#000' : '#fff';
}