# Top level options

The following options are available at the top level. They apply to all annotations unless they are overwritten on a per-annotation basis.

Name Type Scriptable Default Notes
animations object No see here To configure which element properties are animated and how.
annnotations object|array Yes undefined To configure all annotations to draw.
clip boolean No true Are the annotations clipped to the chartArea.
common Object No To configure common options apply to all annotations
interaction Object No options.interaction To configure which events trigger plugin interactions

WARNING

Setting clip to false, you can enable the possibility to draw part of the annotation outside of the chart area.

Nevertheless events are only caught over the chartArea.

# Animations

Animations options configures which element properties are animated and how, with the same configuration of chart.js (opens new window).

const options = {
  plugins: {
    annotation: {
      animations: {
        numbers: {
          properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'radius'],
          type: 'number'
        },
      },
      annotations: {
        box1: {
          type: 'box',
          xMin: 1,
          xMax: 2,
          yMin: 50,
          yMax: 70,
          backgroundColor: 'rgba(255, 99, 132, 0.5)'
        }
      }
    }
  }
};

# Default animations

Name Option Value
numbers properties ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius']
numbers type 'number'
colors properties ['backgroundColor', 'borderColor']
colors type 'color'

# Common

The following options apply to all annotations unless they are overwritten on a per-annotation basis.

Name Type Scriptable Default Notes
drawTime string|number Yes 'afterDatasetsDraw' See drawTime.
init boolean See initial animation false Enable the animation to the annotations when they are drawing at chart initialization

# Initial animation

The init option is scriptable but it doesn't get the options context as argument but a specific context because the element has not been initialized yet, when the callback is invoked.

This is the signature of the scriptable option:

({chart, properties, options}) => void | boolean | AnnotationElement

where the properties is the element model

{
  x: number,
  y: number,
  x2: number,
  y2: number,
  centerX: number,
  centerY: number,
  width: number,
  height: number,
  radius?: number
}

which can be used in the callback to return an object with the initial values of the element, to provide own initial animation.

# Events

The following options are available for all annotation types. These options can be specified per annotation, or at the top level which apply to all annotations.

Name Type Chart event1 Notes
click (context, event) => boolean | void 'click' Called when a single click occurs on the annotation.
enter (context, event) => boolean | void 'mousemove' Called when the mouse enters the annotation.
leave (context, event) => boolean | void 'mousemove' Called when the mouse leaves the annotation.

TIP

1 Chart.js events (opens new window) that need to be enabled in order to get the associated annotation event working. Note that by default Chart.js enables 'mousemove', 'mouseout', 'click', 'touchstart', 'touchmove', meaning that annotation events work out-of-the-box.

If the event callbacks explicitly returns true, the chart will re-render automatically after processing the event completely. This is important when there are the annotations that require re-draws (for instance, after a change of a rendering options).

# Hooks

The following hooks are available for all annotation types. These hooks can be specified per annotation, or at the top level which apply to all annotations.

These hooks enable some user customizations on the annotations.

Name Type Notes
beforeDraw (context) => void Called before that the annotation is being drawn.
afterDraw (context) => void Called after the annotation has been drawn.