Eventos de mouse JS que funcionam mesmo quando o mouse é movido para fora da janela

Não é garantido que mousedownserá seguido por mouseupqualquer elemento do documento!

Se você espera mousedownque aconteça em qualquer nó DOM, está criando um bug de “botão aderente do mouse”.

document.body.onmouseup = // NO, this is a bug!

Em vez disso, você deve ouvir apenas mouseupem window:

window.onmouseup = function(e) {…}

ou melhor:

window.addEventListener('mouseup', function(e) {…}, false);

O mesmo se aplica ao mousemoveevento. Ele será disparado mesmo quando o ponteiro do mouse sair da janela e seus scripts que rastreiam o mouse não ficarão cegos e com falhas quando o ponteiro do mouse se mover para fora da janela de exibição do documento.

Você pode vê-lo em ação no Slip.js .