[EMAIL PROTECTED] wrote:
> i try to do that you suggest me.It's work but i've one problem.
> if i've more than one rect and i want to show text on each rect,
> how i can do it.
It was an interesting problem, so I made my first try at JavaScript
applied to SVG...
Well, I was greatly helped by two files I found: keySplineTool shown how
to set the text of the debug line (which you will remove anyway, but it
was useful...), and a file named ToolTips which provided the core of the
code, namely how to make a text display the desc of a tag, how to show
and hide it, etc. The later doesn't have any information on where I got
it...
Here is my code, derivated from your code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/SVG/DTD/svg10.dtd">
<svg width="400px" height="400px" viewbox="0 0 400 400"
xmlns:xlink="http://www.w3.org/1999/xlink">
<script type="text/javascript">
<![CDATA[
var caption = document.getElementById("Caption");
var captionContent = document.getElementById("CaptionContent");
var pointedElement, peX, peY;
function Debug(d)
{
var debugText = document.getElementById("Debug");
debugText.getFirstChild().setData(d);
}
function Display()
{
caption.setAttribute("visibility", "visible");
caption.setAttribute("transform", "translate(" + peX + "," + peY + ")");
captionContent.setAttribute("xlink:href", "#" + pointedElement.id);
}
function ShowData(evt)
{
// Avoid redisplaying if already displayed
if (pointedElement != evt.target)
{
pointedElement = GetElementWithId(evt);
if (pointedElement.getAttribute('id')) // Avoid unamed elements
{
// If you want caption to be near cursor
peX = evt.clientX + 4;
peY = evt.clientY - 1;
// If you prefer to have caption below object
peX = Math.abs(pointedElement.getAttribute('x'));
peY = Math.abs(pointedElement.getAttribute('y'));
peY += Math.abs(pointedElement.getAttribute('height')) + 15;
Debug("ShowData: OK - " + pointedElement.id + ' - ' + peX + ', ' + peY);
Display();
}
}
}
function HideData(evt)
{
Debug("HideData");
document.getElementById('Caption').setAttribute('visibility','hidden');
pointedElement = null;
}
// If event is related to an element inside a complex drawing,
// search the parent element holding the ID
function GetElementWithId(evt)
{
// Get element related to event
var target = evt.getTarget();
// While the element hasn't an ID
while (target && !target.getAttribute('id'))
{
// Go up to find the parent element with the ID
target = target.getParentNode();
}
return target;
}
//]]>
</script>
<rect id="1" x="54" y="266" width="37" height="94" fill="Red"
stroke="black"
stroke-width="1" class="" onmouseover="ShowData(evt)"
onmouseout="HideData(evt)">
<desc>First Rectangle</desc>
</rect>
<rect id="2" x="194" y="173" width="37" height="187" fill="Red"
stroke="black"
stroke-width="1" class="" onmouseover="ShowData(evt)"
onmouseout="HideData(evt)">
<desc>Second Red Rectangle</desc>
</rect>
<rect id="3" x="91" y="220" width="37" height="140" fill="Blue"
stroke="black"
stroke-width="1" class="" onmouseover="ShowData(evt)"
onmouseout="HideData(evt)">
<desc>Last Rectangle (blue)</desc>
</rect>
<text id="Caption" x="0" y="0" font-size="12" visibility="hidden"
text-rendering="optimizeLegibility">
|<tref id="CaptionContent" xlink:href="#active"/>|
</text>
<text id="Debug" x="20" y="20" font-size="14"
text-rendering="optimizeLegibility">Debug</text>
</svg>
You can improve by drawing the text over a rectangle (tooltip style),
and it seems you can remove the onmouseover and onmouseout of the rects
and replace them by these two lines:
document.rootElement.addEventListener("mousemove", ShowData, false)
document.rootElement.addEventListener("mouseout", HideData, false)
This is quite elegant, but I think you must then take care that the ids
of the elements to caption follow a given pattern, otherwise you may get
false hits.
The above code works in IE and Mozilla.
HTH.
--
Philippe Lhoste
-- (near) Paris -- France
-- Professional programmer and amateur artist
-- http://Phi.Lho.free.fr
-- -- -- -- -- -- -- -- -- -- -- --
------------------------ Yahoo! Groups Sponsor --------------------~-->
Make a clean sweep of pop-up ads. Yahoo! Companion Toolbar.
Now with Pop-Up Blocker. Get it for free!
http://us.click.yahoo.com/L5YrjA/eSIIAA/yQLSAA/1U_rlB/TM
--------------------------------------------------------------------~->
-----
To unsubscribe send a message to: [EMAIL PROTECTED]
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my membership"
----
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/svg-developers/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/