ball.addEventListener('mousedown', function(evt) {
svg.addEventListener('mousemove', drag)
})
ball.addEventListener('mouseup', function(evt) {
svg.removeEventListener('mousemove', drag)
})
svg.addEventListener('mouseleave', function(evt) {
svg.removeEventListener('mousemove', drag)
})
function drag(evt) {
let x = evt.x - ball.cx.baseVal.value
let y = evt.y - ball.cy.baseVal.value
ball.setAttribute('transform', 'translate(' + x + ', ' + y + ')')
}
https://jsfiddle.net/Stalk/vts4dg8z/
Из библиотек могу порекомендовать d3.js и svg.js