Сегодня вышел новый 3.9 релиз 🥳! Этот выпуск содержит 7 новых функций и 3 исправления ошибок.

Подробную информацию о выпуске см. в примечании к выпуску:
https://github.com/naver/billboard.js/releases/tag/3.9.0

Что нового?

дуговая игла

Иглу можно использовать для указания определенной точки значения данных в форме дуги.

Демонстрации:https://naver.github.io/billboard.js/demo/#DonutChartOptions.DonutNeedle
https://naver.github .io/billboard.js/demo/#GaugeChartOptions.GaugeNeedle

Форму иглы можно полностью настроить по своему усмотрению (в этом случае необходимо указать значение пути) или просто обновить длину или верхний/нижний радиусы.

Ознакомьтесь с полным интерфейсом опций и его комментариями, чтобы понять каждую опцию.

[donut | gauge]: {
   // when 'arc.needle.show=true' is set, will able to use template to reflect needle value
   title: "{=NEEDLE_VALUE}"
},
arc: {
   needle: {
       show: true,
       color: "red", // any valid CSS color

       // for customized needle
       path: function(length) {
         const len = length - 20;

         // will return upper arrow shape path
         // Note: The path should begun from '0,0' coordinate to top center.
         const path = `M 0 -${len + 20}
           L -12 -${len}
           L -5 -${len}
           L -5 0
           A 1 1 0 0 0 5 0
           L 5 -${len}
           L 12 -${len} Z`;

         return path;
       },

       value: 40,  // will make needle to point value 40.
       length: 80, // needle length in percentages relative to radius.

       top: {
         // rx and ry are the two radii of the ellipse;
         // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d#elliptical_arc_curve
         rx: 1,
         ry: 1,
         width: 5
       },

       bottom: {
         // rx and ry are the two radii of the ellipse;
         // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d#elliptical_arc_curve
         rx: 1,
         ry: 1,
         width: 10
         len: 10
       }
     }
 }

В первой кольцевой диаграмме используется настроенная игла и указанное начальное значение. В этом случае, когда некоторые ряды данных скрыты, стрелка будет обновляться до заданного значения.

И вторая диаграмма, инициализированная значением 0, и значение стрелки обновляется динамически.

Для динамического обновления значения иглы он предоставляет простой метод API для обновления текущего значения иглы на chart.$.needle.updateHelper().

// Update arc needle position
const chart = bb.generate({
  data: {
    type: "donut"
  },
  arc: {
    needle: {
      show: true,
      ...
    }
  }
});

chart.$.needle.updateHelper(70);  // update needle position to point value 70.

// update needle position to point value 70 and the config value.
// NOTE: updating config value, will update needle pointer initial value too.
chart.$.needle.updateHelper(70, true);

// update needle point position every 1 second
let i = 0;
setInterval(() => {
  chart.$.needle.updateHelper(i += 10);
}, 1000)

Темная тема

Темный режим довольно распространен в наши дни, и для облегчения будет предоставлена ​​dark тема из этого релиза.

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

dark тема будет распространяться как один CSS-файл, и вы увидите ее в действии на странице примера, выбрав ее в левой части навигации в разделе «Тема».

точ.чувствительность

Опция point.sensitivity позволит настроить расстояние (от координаты x/y точки данных) для взаимодействия.

Демонстрация: https://naver.github.io/billboard.js/demo/#Point.PointSensitivity

Когда значение чувствительности равно 3, это означает, что взаимодействие произойдет, когда указатель мыши войдет в границы 3 пикселей, начиная с точной координаты x/y.

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

Чтобы улучшить это, будет предоставлена ​​опция radius, чтобы отразить чувствительность в зависимости от каждого радиуса пузырька. А также предоставляет опцию обратного вызова, которая может добавить некоторые условия для более подробного управления.

point: {
     // having lower value, means how closer to be for interaction
     sensitivity: 3,

     // sensitivity based on point's radius
     sensitivity: "radius",

     // callback for each point to determine the sensitivity
     sensitivity: function(d) {
       // ex. of argument d:
       // ==> {x: 2, value: 55, id: 'data3', index: 2, r: 19.820624179302296}
      
       // returning d.r, will make sensitivity same as point's radius value.
       return d.r;
     }
}

В приведенном ниже примере показано, когда значение чувствительности указано как абсолютное значение, а когда указано значение radius.

data.labels.position

Еще один вариант улучшения для управления положением текста метки данных.

Демо:https://naver.github.io/billboard.js/demo/#Data.DataLabelPosition

Просто верните соответствующее значение координат x/y для каждого элемента текста данных, как вы хотите.

data: {
  ...
  labels: {
     show: true,
     /**
      * The arguments are:
      * - `type` coordinate type string, which will be 'x' or 'y'.
      * - `v` is the value of the data point where the label is shown.
      * - `id` is the id of the data where the label is shown.
      * - `i` is the index of the data series point where the label is shown.
      * - `texts` is the array of whole corresponding data series' text labels.
      */
     position: function(type, v, id, i, texts) {
       let pos = 0;
       const len = texts.size() / 2 - 1;

       if (type === "x" && (i === 0 || i === len)) {
         pos = i === 0 ? 20 : -20;
       }

       return pos;
    }
  }
}

бар.фронт

Когда в одной диаграмме используются различные типы фигур с гистограммой, обычно гистограммы располагаются позади других элементов фигур, чтобы не накладываться друг на друга и не прерывать видимость.

Контролировать z-порядок в «мире svg» непросто, потому что z-порядок будет соответствовать древовидной структуре DOM.

Единственный способ контролировать это — управлять древовидной структурой DOM, что является непростой задачей.

Демо: https://naver.github.io/billboard.js/demo/#BarChartOptions.BarFront

Включение этой опции просто заставит фигуры полос появляться перед другими элементами фигур.

bar: {
    front: true
}

Легко заметить отличия от приведенного ниже примера.

легенда.элемент.взаимодействие

По умолчанию элементы легенды будут переключаться и переключаться между ними. Но иногда возникает необходимость его отключить.

Начиная с этого релиза, будут предоставлены новые возможности для управления им.

Демо: https://naver.github.io/billboard.js/demo/#Legend.LegendItemInteraction

Предоставим 2 способа управления:

  • Включить или отключить взаимодействие легенды по умолчанию
  • Обеспечьте взаимодействие «двойной щелчок», что в этом случае двойного щелчка приведет к фокусировке выбранных наборов данных и скрытию других.
legend: {
   item: {
      // will disable default interaction (mouse hover effect and click to hide clicked dataseries)
      interaction: false | {
        /**
        * Set legend item to interact on double click.
        *  - **NOTE:**
        *    - Double clicking will make focused clicked dataseries only, hiding all others.
        *      - for single click case, `click + altKey(Win)/optionKey(Mac OS)` to have same effect.
        *    - To return initial state(which all dataseries are showing), double click current focused legend item again.
        *      - for single click case, `click + altKey(Win)/optionKey(Mac OS)` to have same effect.
        *    - In this case, default `click` interaction will be disabled.
        */
        dblclick: true
      },

      // when set below callback option value, will work regardless of 'interaction=false' is set
      onclick: function(id) { ... },
      onover: function(id) { ... },
      onout: function(id) { ... }
   }
}

См. в действии, когда опция dblclick включена. Элемент легенды «Двойной щелчок» приведет к отображению только выбранных серий данных и скрытию остальных.

Чтобы вернуться к исходным состояниям, снова дважды щелкните выделенный элемент легенды.

Закрытие

Количество загрузок постоянно растет и достигло 100 тысяч загрузок в месяц!

Это доказывает конкурентоспособность среди других вариантов, и это как-то восхитительно 😆 видеть, что все больше разработчиков по всему миру выбирают billboard.js для визуализации данных.

Мы будем постоянно улучшать вашу поддержку!