2013-09-27 7 views
7

Comment lier un survol ou un événement d'un objet dessiné sur le canevas? Par exemple, j'ai essayé ceci:Toile HTML5 Mouseover event

var c=document.getElementById("myCanvas"); 
var ctx=c.getContext("2d"); 
ctx.beginPath(); 

//STEP ONE 
var stepOneRec = ctx.rect(20, 60, 266, 50); 
ctx.stroke(); 
stepOneRec.addEventListener("mouseover", function() { alert('it works!'); }); 

Sur un site que j'ai regardé il a montré une méthode utilisant Kinetic.js. Si c'est la seule façon, je vais l'utiliser, je suppose juste qu'il existe un moyen de lier des événements à des éléments dessinés sans plug-ins supplémentaires. Désolés Toile noob. Je fait un violon avec mon code ici: http://jsfiddle.net/jyBSZ/2/

Répondre

4

(j'ai commencé cela comme un commentaire posté, alors réalisé que c'est une réponse réelle.)

Malheureusement, en javascript sur son propre, vous ne pouvez pas. Il n'y a pas d'objets de toile, juste la toile dans son ensemble, et tout ce que vous avez dessiné sur son contexte. Les plugins comme cinétique peuvent faire des objets pour vous, mais tout le point de la toile est que le navigateur peut y penser comme une seule image statique. Si vous le souhaitez, vous pouvez lier des événements mousemove au canevas, suivre sa position et la position où vous avez dessiné des éléments, et impliquer par vous-même que c'est "cet objet" (effectivement ce que font les plugins), mais c'est tous les événements de mousemove sur un seul canevas plutôt que des événements mouseover sur les composants de celui-ci. (Vous pouvez même faire en sorte que votre événement simule un événement mouseover pour les "objets", mais en dessous, il est toujours basé sur la vérification du mouvement et la vérification de votre propre configuration.)

+1

Ohh! J'étais sur ce site (http://hakim.se/experiments/html5/blob/03/) et j'essayais de voir comment il gérait ses événements de souris, je suppose que c'est juste par des corrdinartes. – user2287474

+0

@ user2287474 Il a minimisé son code principal, ce qui le rend vraiment difficile à dire. À l'intérieur de js/blob.min.js, je peux voir que la plupart de ses fonctions pour gérer les événements sont les premières, mais c'est trop difficile à interpréter correctement. (Je vois des choses en regardant les presses du clavier et les événements tactiles). Il créa des objets pour contenir les informations de rendu, mais quelque part là-bas, il restituait tous les objets de chaque animation. –

+1

Je pense qu'il veut dire l'événement mousemove. Utilisez l'événement mousemove pour suivre la position, puis une instruction conditionnelle pour "faire quelque chose" quand il arrive dans la zone de l'objet. –

2

Les objets dessinés dans un élément canvas ne sont pas des éléments HTML , juste des pixels, et ne lancera donc pas les événements DOM comme le feraient les éléments HTML.

Vous devez suivre vous-même l'emplacement de vos objets et gérer l'événement onmousemove du canevas afin de déterminer si la souris se trouve sur l'un de vos objets dessinés.

2

vous pouvez utiliser jCanvas, jetez un oeil here

i fait un jsfiddle exemple pour votre problème.

juste modifier callbacks suivant pour résultat souhaité

function mouseOut(layer){ 
$("#mouse-over-text").html('none options selected'); 
} 

function mouseIn(layer){ 
$("#mouse-over-text").html(getTextForId(layer.name)); 
}