4.2

Привет.

Итак, приступим.


Подготовительные мероприятия остаются теми же, что и в 1.2, по сути мы поменяем лишь сам тернарный оператор, который здорово разрастется. Вот он: ( @value.y < 6 ? '<div style="display:flex; align-items:center; color:' + ({0:'#f4a261',1:'#2a9d8f',2:'#264653',3:'#e76f51',4:'#e9c46a',5:'#6a994e',6:'#f94144',7:'#577590',8:'#2c70'}[this.series.index] || '#000') + ';">' + '<span style="white-space:nowrap; margin-right:50px; display:inline-block;">' + // Число смещено вниз '<span style="display:inline-block; transform: translateY(9px);">' + @value.y + '</span> ' + '<span style="color:' + ({0:'#f4a261',1:'#2a9d8f',2:'#264653',3:'#e76f51',4:'#e9c46a',5:'#6a994e',6:'#f94144',7:'#577590',8:'#2c70'}[this.series.index] || '#000') + ';">→</span>' + '</span>' + '<div style="width:20px; height:20px;"></div>' + '</div>' : @value.y < 15 ? '<div style="display:flex; align-items:center; color:' + ({0:'#f4a261',1:'#2a9d8f',2:'#264653',3:'#e76f51',4:'#e9c46a',5:'#6a994e',6:'#f94144',7:'#577590',8:'#2c70'}[this.series.index] || '#000') + ';">' + '<div style="width:20px; height:20px;"></div>' + '<span style="white-space:nowrap; margin-left:57px; display:inline-block;">' + '<span style="color:' + ({0:'#f4a261',1:'#2a9d8f',2:'#264653',3:'#e76f51',4:'#e9c46a',5:'#6a994e',6:'#f94144',7:'#577590',8:'#2c70'}[this.series.index] || '#000') + '; vertical-align: middle;">←</span> ' + '<span style="display:inline-block; transform: translateY(-7px);">' + @value.y + '</span>' + '</span>' + '</div>' : '<div style="text-align:center;">' + @value.y + '</div>' )


▎Что здесь происходит?

У нас всё та же структура кода, как и в прошлом примере:

Если @value.y < 6, то вывести блок с определённым стилем, иначе если @value.y < 15, вывести блок с другим стилем, иначе вывести значение по умолчанию (с выравниванием по центру).

Но сам код разросся вглубь, так как теперь нам надо отдельно фиксировать положение стрелок и цифр данных.


▎Разбор кода по частям:

▎1. Условие: @value.y < 6

Если значение y меньше 6 — применяем такой блок:

style=" display:flex; /* используется специальный flex-контейнер / aligh-items:center; / выравнивание содержимого контейнера по центру / color: <цвет>; / цвет фона */

1. Цвет фона выбирается из объекта по индексу серии this.series.index: ({ 0:'#f4a261', 1:'#2a9d8f', 2:'#5fb2d4', 3:'#e76f51', 4:'#e9c46a', 5:'#6a994e', 6:'#f94144', 7:'#577590', 8:'#2c70' }[this.series.index] || '#000')

Если индекс не найден — используется белый цвет #000.

Внутри <div> кладём <span> с текстом:

• style="white-space:nowrap; margin-right:50px; display:inline-block;" Запрещает перенос текста, добавляет справа отступ 50 пикселей и делает элемент строчно-блочным для отступов и границ.

Внутри этого <span> два элемента:

• Первый — число @value.y, обёрнутое в <span> с CSS: display:inline-block; transform: translateY(9px); — визуально смещает число вниз на 9 пикселей.

• Второй — стрелка → (вот она, у самого конца блока: >→</span>), у которой цвет такой же, как и у текста (берём его из того же объекта цветов).

После <span> с числом и стрелкой идёт пустой <div>:

• style="width:20px; height:20px;" — блок фиксированного размера для выравнивания и отступа.


2. Условие: @value.y < 15

С первым условием мы разобрались. У второго есть небольшие косметические изменения для того, чтобы избежать визуальных конфликтов с первым условием.

Первый <span> — контейнер для стрелки — сдвигаем влево на 57 пикселей: margin-left:57px;

Внутри:

• <span> со стрелкой ← вертикально выравниваем посередине: vertical-align: middle;

• <span> с самим числом @value.y, смещаем немного вверх (translateY(-7px)), чтобы визуально лучше смотрелось рядом со стрелкой и было достаточно пространства рядом с возможными значениями из первого условия.

--