Não é garantido que mousedown
será seguido por mouseup
qualquer elemento do documento!
Se você espera mousedown
que 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 mouseup
em window
:
window.onmouseup = function(e) {…}
ou melhor:
window.addEventListener('mouseup', function(e) {…}, false);
O mesmo se aplica ao mousemove
evento. 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 .