OK, great. Thanks for explaining how bubbling should work. It got me thinking in the right direction. I do only register the listener once on the root node. That's why I was afraid of registering further listeners on other nodes; it would make it complicated. I'm only handling mouse events and so far so good.
Thanks again. Michael Bishop > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > On Behalf Of Archie Cobbs > Sent: Thursday, January 03, 2008 5:06 PM > To: [email protected] > Subject: Re: Pointer events for a <g> tag? > > I think that should work. > > By the way, with only one listener per document, you might as > well just only register the listener once, on the root node. > Then use event.getTarget() to determine what node was hit. Of > course this only works for events that bubble. > > > On Jan 3, 2008 3:52 PM, Bishop, Michael W. CONTR J9C880 > <[EMAIL PROTECTED]> wrote: > > > Yeah, the section on interaction was what brought me > here. I thought > there'd be a value for the pointer-events tag that > pushed events to the > parent or absorbed events from the children. > > I'm trying to avoid having separate listeners for every > group that I > add. As it stands now, I have one mouse listener per > document and it'd > be a pain to break that paradigm. The idea about the > IDs is specific to > my project. I was thinking of something like this > (regarding the IDs): > > public void handleEvent(Event event) { > final DOMMouseEvent elementEvent = (DOMMouseEvent) event; > Element targetElement = (Element) event.getTarget(); > > (Pseudocode) > if (targetElement doesn't have an ID) { > targetElement = (Element) targetElement.getParentNode(); > } > > // Now we can operate on the intended element. > ... > } > > I think this might work, assuimg that I set the children to > pointer-events="visible" (or let them inherit from the > group tag). > Would this work? In my case, it'd be easier than a new > listener. > > > Michael Bishop > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > On Behalf Of Archie Cobbs > > > Sent: Thursday, January 03, 2008 4:38 PM > > To: [email protected] > <mailto:[email protected]> > > Subject: Re: Pointer events for a <g> tag? > > > > If you haven't already, read > http://www.w3.org/TR/SVG/interact.html > > > > The presence of an "id" attribute is not relevant. What > > matters is the "pointer-events" attribute. Note that the > > default value is "inherit". > > > > If you turn off pointer events on the inner nodes, no events > > will happen, so don't do that. > > > > If you have something like this: > > > > <g pointer-events="all"> > > <rect ..> <!-- note: we inherit the "all" value for > > pointer-events --> > > <line ..> > > </g> > > > > and then listen for events on the <g> node, then you should > > receive any clicks on the <rect> or <line> as they bubble up. > > Note in any case you won't receive events for clicks that are > > not directly on either the <rect> or the <line>. > > > > > > On Jan 3, 2008 3:22 PM, Bishop, Michael W. CONTR J9C880 > > <[EMAIL PROTECTED]> wrote: > > > > > > OK, then I'm doing something wrong and I need to > > explain a little more. > > > > I have a single listener that's attached to the entire > > document. I want > > to drag and drop objects around my SVG document with > > few exceptions: > > > > <svg id="..."> > > > > (This rectangle is here specifically to provide a > > background color). > > <rect type="background" id="..." ... /> > > > > (Special metadata is included as an attribute to > > define this element > > as a layer). > > <g type="layer" id="..."> > > > > (Each of these children can be dragged and dropped) > > <rect id="..." pointer-events="visible" ... /> > > <ellipse id="..." pointer-events="visible" ... /> > > <line id="..." pointer-events="visible" ... /> > > > > (Special metadata is included as an attribute to > > define this > > element as a group. > > I want to drag and drop the GROUP, not the > > elements within! I > > know this doesn't > > work, but this is what I currently have. I tried > > to make the > > individual elements > > ignore events so the <g> would receive them. > > Obviously it didn't > > work; the > > background rect receives the event.) > > <g type="group" id="..." pointer-events="visible"> > > <circle pointer-events="none" ... /> > > <line pointer-events="none" ... /> > > </g> > > </g> > > </svg> > > > > I want any clicks on the group's children to bubble up > > to the group, but > > it sounds like that's not possible with a single > > listener. Is there a > > way I can customize or work around that? I'm thinking > > that if an > > element does not have an "id" node, it bubbles up until > > it hits a parent > > that does? > > > > Michael Bishop > > > > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] ] > > > On Behalf Of Archie Cobbs > > > Sent: Thursday, January 03, 2008 4:08 PM > > > To: [email protected] > <mailto:[email protected]> > > > Subject: Re: Pointer events for a <g> tag? > > > > > > Not sure what you're asking exactly, but > mouse events have a > > > bubble phase during which they pass upwards > in the DOM to the > > > root node. > > > > > > If you listen for mouse events on the <g> tag > (only), you'll > > > receive them there when they bubble up from the rect, > > > ellipse, and line nodes. > > > > > > > > > On Jan 3, 2008 3:03 PM, Bishop, Michael W. > CONTR J9C880 > > > < [EMAIL PROTECTED] > > > <mailto:[EMAIL PROTECTED]> > wrote: > > > > > > > > > Given the following: > > > > > > <g pointer-events="visible"> > > > <rect .../> > > > <ellipse .../> > > > <line .../> > > > </g> > > > > > > I want to treat the inner elements of > the <g> tag as a > > > single entity. I > > > want to be able to drag and drop them > as a single > > > element. I thought > > > wrapping them in a <g> tag and having > the <g> tag > > > respond to pointer > > > events was the solution. Upon further > research, it > > > seems pointer events > > > only work for graphics elements and a > <g> tag isn't > > > technically rendered > > > to the screen. > > > > > > So how can I treat this group of > elements as a single > > > "group" and have > > > them respond to pointer events as a whole? > > > > > > Michael Bishop > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: > > > > [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > > > For additional commands, e-mail: > > > [EMAIL PROTECTED] > > > <mailto:[EMAIL PROTECTED]> > > > > > > > > > > > > > > > > > > > > > > -- > > > Archie L. Cobbs > > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: > > [EMAIL PROTECTED] > > For additional commands, e-mail: > > [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > > > <mailto:[EMAIL PROTECTED]> > > > > > > > > > > > > > > > -- > > Archie L. Cobbs > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > [EMAIL PROTECTED] > > > > > > > -- > Archie L. Cobbs > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
