2012-08-04 17 views
7

Aquí hay un violín: http://jsfiddle.net/MZ9Xm/Cuando hago clic en un lienzo y arrastro el mouse, el cursor cambia a un cursor de selección de texto. ¿Cómo puedo prevenir esto?

Nota: Lo siguiente ocurre en Chrome 22.0.1221.1, pero no en Firefox 14.0.1. [Ubuntu Linux]

Mueva el mouse hacia el lienzo superior y mantenga presionado el botón del mouse. Arrastre el mouse y el cursor cambiará a un cursor de mouse de selección de texto (I-bar). Esto no ocurre si no hay otros elementos en la página.

Me he equivocado al configurar la selección del usuario a ninguna, pero no he tenido suerte.

+0

Enlazando [esta pregunta] (http://stackoverflow.com/q/4945874/94197), algunos de los comentarios discuten este error. –

Respuesta

23

Puede enlazar un evento de mousedown en su lienzo para evitar el comportamiento predeterminado.

Algo así como:

// with jQuery 
$("#canvasId").mousedown(function(event){ 
    event.preventDefault(); 
}); 

// without jQuery 
document.getElementById("canvasId").onmousedown = function(event){ 
    event.preventDefault(); 
}; 

Aquí está el violín actualización: http://jsfiddle.net/MZ9Xm/1/

Usted tendrá que probar esto para ver si hay algún efecto secundario en lo que está haciendo.

3

¿Ha intentado utilizar el CSS cursor property?

canvas { 
    cursor: pointer; 
} 

Debería mostrar el cursor predeterminado.

+0

Sí, lo intenté pero no a los dados. Pruébalo en el violín. El cursor aún cambia a un cursor de selección de texto. (En Chrome 22.0.1221.1. No tengo que hacer nada para que funcione con Firefox 14.0.1.) – shino

+0

Debería ser un error de Chrome ... De todos modos, tenían el mismo problema en [esto hilo] (http://stackoverflow.com/questions/2659999/html5-canvas-hand-cursor-problems) y parece que lo resolvieron. –

+0

¡Genial! Encontré la respuesta allí (fue la respuesta de Damon). No estoy seguro sobre el protocolo aquí. Supongo que si cambias esta respuesta para vincularla a la de Damon, ¿la aceptaré? – shino

1

Prueba esto:

var canvasEls = document.getElementsByTagName('canvas'), 
    preventHl = function() { return false; }, 
    i = 0; 

while (i < canvasEls.length) { 
    canvasEls[i].onmousedown = preventHl; 
    i += 1; 
} 

Volviendo falsa impedirá acciones predeterminadas tales como poner de relieve que se produzcan.

Cuestiones relacionadas