Okay, nerd sniped. Pretty untested, no idea what happens with negative scales.
/// plugins[0].afterEvent
(chart, event) => {
if (event.event.type !== 'mousedown') return
const { x: clickX, y: clickY } = event.event
const { y: scale } = chart.scales
const onScale = clickX < scale.right && clickY > scale.left
console.log(onScale)
if (!onScale) return
let isDragging = true
const { min: startMin, max: startMax, height: scaleHeight } = scale
const onMouseMove = (moveEvent) => {
if (!isDragging) return
console.log('onMouseMove')
const deltaY = moveEvent.clientY - clickY
const percentChange = (deltaY / scaleHeight) * (startMax - startMin)
const delta = (percentChange * (startMax - startMin)) / 100
chart.options.scales.y.min = startMin
chart.options.scales.y.max = startMax + delta
chart.update()
}
const onMouseUp = () => {
console.log('onMouseUp')
isDragging = false
document.removeEventListener('mousemove', onMouseMove)
document.removeEventListener('mouseup', onMouseUp)
}
document.addEventListener('mousemove', onMouseMove)
document.addEventListener('mouseup', onMouseUp)
console.log(chart, event)
}
