diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 4f2d5963..18057645 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -69,6 +69,7 @@ module.exports = { 'bar', 'log', 'time', + 'drag', 'api', ], } diff --git a/docs/samples/drag.md b/docs/samples/drag.md new file mode 100644 index 00000000..003497fb --- /dev/null +++ b/docs/samples/drag.md @@ -0,0 +1,112 @@ +# Drag To Zoom + +Zooming is performed by clicking and selecting an area over the chart with the mouse. + +```js chart-editor +// +const NUMBER_CFG = {count: 20, min: -100, max: 100}; +const data = { + datasets: [{ + label: 'My First dataset', + borderColor: Utils.randomColor(0.4), + backgroundColor: Utils.randomColor(0.1), + pointBorderColor: Utils.randomColor(0.7), + pointBackgroundColor: Utils.randomColor(0.5), + pointBorderWidth: 1, + data: Utils.points(NUMBER_CFG), + }, { + label: 'My Second dataset', + borderColor: Utils.randomColor(0.4), + backgroundColor: Utils.randomColor(0.1), + pointBorderColor: Utils.randomColor(0.7), + pointBackgroundColor: Utils.randomColor(0.5), + pointBorderWidth: 1, + data: Utils.points(NUMBER_CFG), + }] +}; +// + +// +const scaleOpts = { + reverse: true, + ticks: { + callback: (val, index, ticks) => index === 0 || index === ticks.length - 1 ? null : val, + }, + grid: { + borderColor: Utils.randomColor(1), + color: 'rgba( 0, 0, 0, 0.1)', + }, + title: { + display: true, + text: (ctx) => ctx.scale.axis + ' axis', + } +}; +const scales = { + x: { + position: 'top', + }, + y: { + position: 'right', + }, +}; +Object.keys(scales).forEach(scale => Object.assign(scales[scale], scaleOpts)); +// + +// +const dragColor = Utils.randomColor(0.4); +const zoomOptions = { + pan: { + enabled: false, + }, + zoom: { + enabled: true, + mode: 'xy', + drag: { + borderColor: 'rgb(54, 162, 235)', + borderWidth: 1, + backgroundColor: 'rgba(54, 162, 235, 0.3)' + } + } +}; +// + +const zoomStatus = () => zoomOptions.zoom.enabled ? 'enabled' : 'disabled'; + +// +const config = { + type: 'scatter', + data: data, + options: { + scales: scales, + plugins: { + zoom: zoomOptions, + title: { + display: true, + position: 'bottom', + text: (ctx) => 'Zoom: ' + zoomStatus() + } + }, + } +}; +// + +const actions = [ + { + name: 'Toggle zoom', + handler(chart) { + zoomOptions.zoom.enabled = !zoomOptions.zoom.enabled; + chart.update(); + } + }, { + name: 'Reset zoom', + handler(chart) { + chart.resetZoom(); + } + } +]; + +module.exports = { + actions, + config, +}; +```