Як швидко побудувати кругову діаграму на css і javascript

Для front-end розробника існує величезна кількість способів, якими можна побудувати кругову діаграму - різноманітні бібліотеки, плагіни, приголомшливі можливості SVG графіки і т.д. Однак варто, мабуть, розглянути і найпростіший спосіб створення «пиріжкового» чарту, який може бути корисний, коли задача поставлена ​​максимально просто і немає необхідності або можливості використовувати додаткові інструменти. Далі мова піде про приклад такої реалізації.

Припустимо, що є вихідні дані у вигляді такого масиву, які потрібно представити на круговій діаграмі:

value - це значення у відсотках, color - колір сектора.

Створимо для початку контейнер, який стане колом діаграми і буде містити в собі елементи секторів:

Задамо йому також стилі:

Як швидко побудувати кругову діаграму на css і javascript

В результаті отримуємо таке коло. Все, що виходить за межі його кордонів (зображені пунктиром) буде приховано.

Далі закономірно виникає питання - як ми перетворимо прямокутні елементи div в сектори кола і як задамо їм потрібний кут? Власне, для першої мети і було встановлено властивість overflow: hidden контейнеру, тому що це дозволяє приховати частину елемента, зробивши його таким чином округлим, а для другої нам допоможуть CSS-трансформації. Далі на прикладі для одного сектора.

Додамо всередину контейнера div з класом sector.

Як швидко побудувати кругову діаграму на css і javascript

Таким чином, вийшов сектор зі значенням 90 градусів, що починається на позначці в 0 градусів.

Для того, щоб задати потрібний кут цього сектора, застосуємо CSS-трансформацію skewY. Ця трансформація зрушує праве ребро квадрата по осі y так, щоб горизонтальні ребра утворювали заданий кут зі своїм вихідним положенням:

Як швидко побудувати кругову діаграму на css і javascript

Значення value в першому елементі масиву dataset дорівнює 5, переводячи в градуси, отримуємо 18. Для того, щоб нахил відбувався в потрібну сторону, до всіх кутах будемо додавати 90 градусів.

Таким чином, кут трансформації = 90 + 18 = 108.

Як швидко побудувати кругову діаграму на css і javascript
Як швидко побудувати кругову діаграму на css і javascript
Як швидко побудувати кругову діаграму на css і javascript

Для повороту на заданий кут будемо користуватися трансформацією rotate. Важливо, що спочатку застосовується трансформація повороту, тільки потім трансформація нахилу.

transform: rotate (45deg) skewY (108deg);

Як швидко побудувати кругову діаграму на css і javascript

У цього способу є один недолік - як видно на малюнку, що ілюструє значення трансформації skewY, таким чином можна коректно зображати сектора зі значенням не більше 90 градусів. Тому для зображення значень, більших, ніж 90, доведеться малювати кілька секторів однакового кольору. Наприклад, якщо значення кута 100 градусів, відобразимо 2 сектори: 90 градусів і 10. Якщо значення дорівнює 200 градусам, вийде 3 сектора - по 90, 90 і 20 градусів і т.д.

В результаті отримуємо наступний код для динамічного додавання секторів:

Як швидко побудувати кругову діаграму на css і javascript

Такий «пиріжковий» графік легко перетворити в «пончиковий», додавши контейнеру стилі для псевдоелемента:

Як швидко побудувати кругову діаграму на css і javascript

Схожі статті