2011-02-09 28 views
18

He hecho un tipo de aplicación de pincel usando la etiqueta de Canvas. Yo quería que cuando el ratón está sobre el lienzo el cursor cambia,Cambiar el cursor sobre HTML5 Lienzo al arrastrar el mouse

<canvas id="draw" style="cursor: url(image/pencil.cur)"> 

que han logrado esto, pero no puedo encontrar la manera Tengo que pasar el cursor mientras arrastra el ratón para dibujar la imagen

+1

Tenga en cuenta que debe [evite poner su CSS con su HTML] (http://phrogz.net/CSS/HowToDevelopWithCSS.html#separatestyle). – Phrogz

+1

http://jsfiddle.net/Mutant_Tractor/DMBWC/1/ Este ejemplo muestra que no funciona si tiene texto seleccionable en la página. Cuando arrastras el lienzo en mi ejemplo anterior, aún se convierte en un cursor de selección de texto. –

Respuesta

38

Utilice la pseudo-clase :active CSS para cambiar el cursor cuando el botón del ratón está presionado sobre el elemento:

#draw:active { 
    cursor: url(image/pencil.cur); 
} 

Ejemplo de trabajo: http://jsfiddle.net/nXv63/

+3

Nunca pensé en usar: activo en elementos no clicables ... genial :) – Omiod

+7

** Comentario de [hydrarulz] (http://stackoverflow.com/users/151244) (rechazado editar): ** También necesitas agregar ': focus' para Chrome.No funciona en algunos casos con solo ': active'. Reemplazar '#draw: active {' by '#draw: active, #draw: focus {'. – Anne

+0

+1 para esto. En lugar de la cruz, use el cursor: mover; – fedmich

0

Dos enfoques que se me ocurre para esto, uno de los cuales podría lograr lo que desea:

  1. utilizar algo de JavaScript para cambiar el cursor, a lo largo de las mismas líneas que este fragmento de jQuery:

    $('canvas#draw').css('cursor', 'url(image/another-cursor.cur)'); 
    

    Si tuviera que usar eso en el evento para cuando se presiona el botón del mouse, y restaurar el original cuando se suelta, me imagino que tendría el efecto exacto que desea.

  2. Dibuje el "cursor" en el lienzo y haga que rastree la posición del mouse en el lienzo. De esta forma, podría dibujar un círculo de estilo Photoshop (etc.) para indicar dónde se realizará el dibujo. No estoy seguro de cómo podría ser el rendimiento con este enfoque (no lo he probado), pero me imagino que debería estar bien. Simplemente use el evento que se dispara al mover el mouse para el lienzo, que probablemente es lo que ya está usando para rastrear dónde debe colocarse la pintura.

0

Agregue una clase "arrastrando" al lienzo mientras el acción de arrastre está en (y eliminar en mouseUp)

A continuación, agregue este estilo:

canvas {cursor: default;} 
canvas.dragging {cursor: crosshair;} 
+0

¡Incluso esto no funcionó para mí! Todavía cambia al cursor de selección. – Elisabeth

6

Para cualquiera todavía en busca de una solución a este error webkit: https://bugs.webkit.org/show_bug.cgi?id=105355, esto es lo que hice.

He añadido esta propiedad al elemento del cuerpo para que todo el texto no se pueda seleccionar en mi página y eso es todo.

body { 
    -webkit-touch-callout: none; 

    -webkit-user-select: none; 

    -moz-user-select: none; 

    user-select: none; 
} 

El problema es que si realmente necesita un elemento a ser seleccionable, que tendrá que cambiar su CSS para que así sea.

+0

+1, aunque en realidad no es una solución viable, una solución interesante, no obstante. Parece que hay muchas personas que experimentan este problema, tendría mucho sentido para la mayoría de ustedes agregar un comentario al informe de errores para que los desarrolladores puedan ver la importancia de solucionarlo. –

+0

que funcionó para mí. ¡Establecí esas propiedades en el contenedor de lona y estaba listo! – Lorenzo

Cuestiones relacionadas