Em relação à solução do Pax: não funciona se o usuário clicar em mais de um botão intencionalmente ou acidentalmente. Não me pergunte como eu sei :-(.
O código correto deve ser assim:
var mouseDown = 0;
document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
Com o teste como este:
if(mouseDown){
// crikey! isn't she a beauty?
}
Se você quiser saber qual botão foi pressionado, esteja preparado para fazer do mouseDown uma matriz de contadores e conte-os separadamente para botões separados:
// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
mouseDownCount = 0;
document.body.onmousedown = function(evt) {
++mouseDown[evt.button];
++mouseDownCount;
}
document.body.onmouseup = function(evt) {
--mouseDown[evt.button];
--mouseDownCount;
}
Agora você pode verificar exatamente quais botões foram pressionados:
if(mouseDownCount){
// alright, let's lift the little bugger up!
for(var i = 0; i < mouseDown.length; ++i){
if(mouseDown[i]){
// we found it right there!
}
}
}
Agora, esteja avisado de que o código acima funcionaria apenas para navegadores compatíveis com o padrão que passam um número de botão a partir de 0 ou superior. O IE usa uma máscara de bit dos botões pressionados no momento:
- 0 para "nada é pressionado"
- 1 para a esquerda
- 2 para a direita
- 4 para o meio
- e qualquer combinação dos itens acima, por exemplo, 5 para esquerda + média
Então ajuste seu código de acordo! Eu deixo isso como um exercício.
E lembre-se: o IE usa um objeto de evento global chamado… "event".
Aliás, o IE possui um recurso útil no seu caso: quando outros navegadores enviam "botão" apenas para eventos de botão do mouse (onclick, onmousedown e onmouseup), o IE o envia com onmousemove também. Assim, você pode começar a ouvir onmousemove quando precisar conhecer o estado do botão e verificar o botão evt.botton assim que o conseguir - agora você sabe quais botões do mouse foram pressionados:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Claro que você não ganha nada se ela fingir de morta e não se mover.
Links relevantes:
Atualização # 1 : Não sei por que carreguei o documento. Estilo do código do corpo. Será melhor anexar manipuladores de eventos diretamente ao documento.