Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Fiz diferente, usei o return false no lugar do preventDefault

Pessoal, fiz assim e funcionou perfeitamente:

<canvas id="tela" width="600" height="400" style="border:1px solid #000000;" ></canvas>

<script type="text/javascript">

var tela = document.getElementById("tela");
var ctx = tela.getContext("2d");
var isRightClick = false;

ctx.fillStyle = "gray";
ctx.fillRect(0,0,600,400);

var atira = function(event){
    var x = event.pageX - tela.offsetLeft;
    var y = event.pageY - tela.offsetTop;    

    if(isRightClick){
        ctx.fillStyle = "red";
    }else{
        ctx.fillStyle = "blue";
    }    
    ctx.beginPath();
    ctx.arc(x,y,10,0,2*Math.PI);
    ctx.fill();

    console.log("Posição : "+x+" "+y);

}

tela.onclick = function(a){isRightClick = false; atira(a)}
tela.oncontextmenu = function(a){isRightClick = true; atira(a);return false}

Ok , funcionou ! Mas estou com algumas dúvidas: Alguém também fez assim?

Alguém poderia me responder se é uma boa prática fazer dessa maneira ?

Alguém sabe quais os prós e contras de fazer assim e não da maneira que está na resposta ?

Agradeço desde já!

3 respostas

A ideia dos dois é parar a propagação do evento. O mercado usa mais o preventDefault, pq fica mais claro que vc ta querendo parar a propagação default do evento.

solução!

João praticamente a idéia dos dois é a mesma, geralmente eu vejo mais o preventDefault sendo usado e particularmente prefiro ele pois ja tive muitos problemas usando return false, então acredito que você deveria usar o preventDefault para deixar mais explícito o seu código e por questões de boas práticas talvez.

Para complementar quando você utiliza return false ele também para a propagação de eventos, em outras palavras seria o mesmo que fazer:

e.preventDefault();
e.stopPropagation();

Espero ter ajudado.

Pessoal, Ambas as explicações foram esclarecedoras.

Muito obrigado!