I have a drop down menu system, however at the moment when you accidently leave the drop-down, it disappears straight away. I would like there to be a half a second delay before it goes away, any idea how I might add this to the onmouseout function?
TO must be global
var TO;
the mouseout function
TO=setTimeout(‘obj.style.visibility=\‘hidden\’;’,500)
the mouseover function
clearTimeout(TO);
Thanks for your help. I found it a little confusing though, how do I put that into the html?
you had best post the menu you are using
The code:
<a href=“e-commerce” onmouseover=“MM_swapImage(‘overview’,‘’,‘images/buttons/overview_on.gif’,1);MM_showHideLayers(‘overviewnav’,‘’,‘show’)” onmouseout=“MM_swapImgRestore();MM_showHideLayers(‘overviewnav’,‘’,‘hide’)”><img src=“images/buttons/overview_off.gif” alt=“Overview” width=“97” height=“24” id=“overview” /></a>
Basically, I want a delay on:
onmouseout=“MM_showHideLayers(‘overviewnav’,‘’,‘hide’)”>
What’s the best way?
Is this dreamweaver’? if so best to get a better menu
but I have done this example
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
var Obj,TO;
function VWP_swapImage(id,x,img){
Obj=document.getElementById(id);
Obj.outimg=Obj.src;
Obj.src=img;
}
function VWP_swapImgRestore(){
Obj.src=Obj.outimg;
}
function VWP_showHideLayers(id,x,state){
clearTimeout(TO);
MObj=document.getElementById(id);
if (state=='show'){
MObj.style.visibility='visible';
}
else {
TO=setTimeout('MObj.style.visibility=\\'hidden\\';',500);
}
}
//-->
</script>
</head>
<body>
<a href="e-commerce"
onmouseover="VWP_swapImage('overview','','http://www.vicsjavascripts.org.uk/StdImages/Two.gif',1);VWP_showHideLayers('overviewnav','','show')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')">
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="Overview" width="97" height="24" id="overview" />
</a>
<div id="overviewnav" style="position:relative;width:100px;height:100px;background-color:red;"
onmouseover="VWP_showHideLayers('overviewnav','','show')"
onmouseout="VWP_showHideLayers('overviewnav','','hide')"
></div>
</body>
</html>
there are pleanty of tool tips available
one for starters http://www.vicsjavascripts.org.uk/SimplleTextPopUp//SimplleTextPopUp.htm
Thanks for your help vwphillips, I’m still having trouble with this. I’m trying to get a menu like that at http://www.truepresence.com, but my layers are overlapping because of the time delay.
What can I do?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
// by Vic Phillips http://www.vicsJavaScripts.org.uk
var Obj,TO;
function VWP_swapImage(id,x,img){
Obj=document.getElementById(id);
Obj.outimg=Obj.src;
Obj.src=img;
}
function VWP_swapImgRestore(){
Obj.src=Obj.outimg;
}
function VWP_showHideLayers(id,obj,state,mess){
clearTimeout(TO);
MObj=document.getElementById(id);
if (state=='show'){
if (mess){
MObj.removeChild(MObj.getElementsByTagName('DIV')[0]);
mess=document.getElementById(mess).cloneNode(true);
mess.removeAttribute('id');
MObj.appendChild(mess);
}
if (obj){
MObj.style.left=obj.offsetLeft+'px';
}
MObj.style.visibility='visible';
}
else {
TO=setTimeout('MObj.style.visibility=\\'hidden\\';',500);
}
}
//-->
</script>
</head>
<body>
<a href="e-commerce"
onmouseover="VWP_swapImage('overview','','http://www.vicsjavascripts.org.uk/StdImages/Two.gif',1);VWP_showHideLayers('overviewnav',this,'show','Mess1')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav',this,'hide')">
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="Overview" width="97" height="24" id="overview" />
</a>
<a href="e-commerce"
onmouseover="VWP_swapImage('overview1','','http://www.vicsjavascripts.org.uk/StdImages/Two.gif',1);VWP_showHideLayers('overviewnav',this,'show','Mess2')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav',this,'hide')">
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="overview1" width="97" height="24" id="overview1" />
</a>
<div id="overviewnav" style="position:relative;visibility:hidden;width:100px;height:100px;background-color:red;"
onmouseover="VWP_showHideLayers('overviewnav',null,'show')"
onmouseout="VWP_showHideLayers('overviewnav',null,'hide')"
><div></div></div>
<div style="position:absolute;visibility:hidden;top:0px;left:0px;" >
<div id="Mess1" style="position:absolute:top:0px;left:0px;" >Message 1</div>
<div id="Mess2" style="position:absolute:top:0px;left:0px;" >Message 2</div>
<div id="Mess3" style="position:absolute:top:0px;left:0px;" >Message 3</div>
<div id="Mess4" style="position:absolute:top:0px;left:0px;" >Message 4</div>
</div>
</body>
</html>
Hi, thanks again for your help. I must be honest, I’m not too clever with javascript, and I’m having trouble working your example into the real thing.
Here’s the code:
<div id="nav"><a href="index.html" onmouseover="VWP_swapImage('home','','images/buttons/home_on.gif',1)" onmouseout="VWP_swapImgRestore()"><img src="images/buttons/home_off.gif" alt="Home" width="97" height="24" id="home" /></a><a href="e-commerce" onmouseover="VWP_swapImage('overview','','images/buttons/overview_on.gif',1);VWP_showHideLayers('overviewnav','','show')" onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')"><img src="images/buttons/overview_off.gif" alt="Overview" width="97" height="24" id="overview" /></a><a href="demo" onmouseover="VWP_swapImage('demo','','images/buttons/demo_on.gif',1);VWP_showHideLayers('demonav','','show')" onmouseout="VWP_swapImgRestore();VWP_showHideLayers('demonav','','hide')"><img src="images/buttons/demo_off.gif" alt="Demo" width="97" height="24" id="demo" /></a><a href="signup" onmouseover="VWP_swapImage('signup','','images/buttons/signup_on.gif',1)" onmouseout="VWP_swapImgRestore()"><img src="images/buttons/signup_off.gif" alt="Sign Up!" width="97" height="24" id="signup" /></a><a href="themall" onmouseover="VWP_swapImage('mall','','images/buttons/themall_on.gif',1)" onmouseout="VWP_swapImgRestore()"><img src="images/buttons/themall_off.gif" alt="The Mall" width="97" height="24" id="mall" /></a><a href="contact" onmouseover="VWP_swapImage('contact','','images/buttons/contact_on.gif',1)" onmouseout="VWP_swapImgRestore()"><img src="images/buttons/contact_off.gif" alt="Contact Us" width="99" height="24" id="contact" /></a></div>
<div id="subnav">
<div id="overviewnav" onmouseover="VWP_swapImage('overview','','images/buttons/overview_on.gif',1);VWP_showHideLayers('overviewnav','','show')" onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')">Message</div>
<div id="demonav" onmouseover="VWP_swapImage('demo','','images/buttons/demo_on.gif',1);VWP_showHideLayers('demonav','','show')" onmouseout="VWP_swapImgRestore();VWP_showHideLayers('demonav','','hide')">message</div>
</div>
Could you possibly show me how to get ‘overviewnav’ and ‘demonav’ working properly? I really appreciate this, by the way.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
// by Vic Phillips http://www.vicsJavaScripts.org.uk
var Obj,TO,MObj;
function VWP_swapImage(id,x,img){
return
Obj=document.getElementById(id);
Obj.outimg=Obj.src;
Obj.src=img;
}
function VWP_swapImgRestore(){
return
Obj.src=Obj.outimg;
}
function VWP_showHideLayers(id,obj,state,mess){
clearTimeout(TO);
MObj=document.getElementById(id);
if (state=='show'){
if (mess){
MObj.removeChild(MObj.getElementsByTagName('DIV')[0]);
mess=document.getElementById(mess).cloneNode(true);
mess.removeAttribute('id');
MObj.appendChild(mess);
}
if (obj){
MObj.style.left=(zxcPos(obj)[0])+'px';
MObj.style.top=(zxcPos(obj)[1]+30)+'px';
}
MObj.style.visibility='visible';
}
else {
TO=setTimeout('MObj.style.visibility=\\'hidden\\';',500);
}
}
function zxcPos(zxc){
zxcl=zxc.offsetLeft;
zxct=zxc.offsetTop;
while(zxc.offsetParent!=null){
zxcp=zxc.offsetParent;
zxcl+=zxcp.offsetLeft;
zxct+=zxcp.offsetTop;
zxc=zxcp;
}
return [zxcl,zxct];
}
//-->
</script>
</head>
<body>
<div id="nav" style="position:relative;" >
<a style="position:relative;" href="index.html"
onmouseover="VWP_swapImage('home','','images/buttons/home_on.gif',1)"
onmouseout="VWP_swapImgRestore()">
<img src="images/buttons/home_off.gif" alt="Home" width="97" height="24" id="home" />
</a>
<a style="position:relative;" href="e-commerce"
onmouseover="VWP_swapImage('overview','','images/buttons/overview_on.gif',1);VWP_showHideLayers('overviewnav',this,'show','Mess1')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')">
<img src="images/buttons/overview_off.gif" alt="Overview" width="97" height="24" id="overview" />
</a>
<a href="demo" style="position:relative;"
onmouseover="VWP_swapImage('demo','','images/buttons/demo_on.gif',1);VWP_showHideLayers('overviewnav',this,'show','Mess2')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')">
<img src="images/buttons/demo_off.gif" alt="Demo" width="97" height="24" id="demo" />
</a>
<a href="signup" style="position:relative;"
onmouseover="VWP_swapImage('signup','','images/buttons/signup_on.gif',1)"
onmouseout="VWP_swapImgRestore()">
<img src="images/buttons/signup_off.gif" alt="Sign Up!" width="97" height="24" id="signup" />
</a>
<a href="themall"
onmouseover="VWP_swapImage('mall','','images/buttons/themall_on.gif',1)"
onmouseout="VWP_swapImgRestore()">
<img src="images/buttons/themall_off.gif" alt="The Mall" width="97" height="24" id="mall" />
</a>
<a href="contact"
onmouseover="VWP_swapImage('contact','','images/buttons/contact_on.gif',1)"
onmouseout="VWP_swapImgRestore()">
<img src="images/buttons/contact_off.gif" alt="Contact Us" width="99" height="24" id="contact" />
</a>
</div>
<div id="overviewnav" style="position:absolute;visibility:hidden;width:100px;height:20px"
onmouseover="VWP_showHideLayers('overviewnav',null,'show')"
onmouseout="VWP_showHideLayers('overviewnav',null,'hide')"
><div></div></div>
<div style="position:absolute;visibility:hidden;top:0px;left:0px;" >
<div id="Mess1" style="position:absolute;top:0px;left:0px;width:100px;background-color:red;text-align:center;" >Message 1<br>Message 1<br>Message 1<br>Message 1</div>
<div id="Mess2" style="position:absolute;top:0px;left:0px;width:200px;background-color:blue;text-align:center;" >Message 2</div>
<div id="Mess3" style="position:absolute;top:0px;left:0px;" >Message 3</div>
<div id="Mess4" style="position:absolute;top:0px;left:0px;" >Message 4</div>
</div>
There is only 'overviewnav' the content size color etc are changed by the Message <DIV><br>
http://www.sitepoint.com/forums/showthread.php?t=312597
</body>
</html>
Thanks so much for this my friend, it means a lot. I’m nearly there now, however, with that last lot of code, the rollovers don’t work. Any idea what the problem could be?
function VWP_swapImage(id,x,img){
//return
Obj=document.getElementById(id);
Obj.outimg=Obj.src;
Obj.src=img;
}
function VWP_swapImgRestore(){
// return
Obj.src=Obj.outimg;
}
left the returns in by mistake
Perfect, thanks a lot. The only problem I’m left with now is that the absolutely positioned layers appear further down in Firefox than in IE, any ideas?
Thanks a lot. Again.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
// by Vic Phillips http://www.vicsJavaScripts.org.uk
var Obj,TO,MObj;
function VWP_swapImage(id,x,img){
Obj=document.getElementById(id);
Obj.outimg=Obj.src;
Obj.src=img;
}
function VWP_swapImgRestore(){
Obj.src=Obj.outimg;
}
function VWP_showHideLayers(id,obj,state,mess){
clearTimeout(TO);
MObj=document.getElementById(id);
if (state=='show'){
if (mess){
MObj.removeChild(MObj.getElementsByTagName('DIV')[0]);
mess=document.getElementById(mess).cloneNode(true);
mess.removeAttribute('id');
MObj.appendChild(mess);
}
if (obj){
if (document.all){ // for IE
MObj.style.left=(zxcPos(obj)[0])+'px';
MObj.style.top=(zxcPos(obj)[1]+30)+'px';
}
else { // for most other browsers
MObj.style.left=(zxcPos(obj)[0])+'px';
MObj.style.top=(zxcPos(obj)[1]+30)+'px';
}
}
MObj.style.visibility='visible';
}
else {
TO=setTimeout('MObj.style.visibility=\\'hidden\\';',500);
}
}
function zxcPos(zxc){
zxcl=zxc.offsetLeft;
zxct=zxc.offsetTop;
while(zxc.offsetParent!=null){
zxcp=zxc.offsetParent;
zxcl+=zxcp.offsetLeft;
zxct+=zxcp.offsetTop;
zxc=zxcp;
}
return [zxcl,zxct];
}
//-->
</script>
</head>
<body>
<div id="nav" style="position:relative;" >
<img src="http://www.vicsjavascripts.org.uk/StdImages/Zero.gif" alt="Home" width="97" height="24" border="1" id="home"
onmouseover="VWP_swapImage('home','','http://www.vicsjavascripts.org.uk/StdImages/Two.gif',1)"
onmouseout="VWP_swapImgRestore()"
onclick="window.top.location=index.htm"
/>
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="Overview" width="97" height="24" border="1" id="overview"
onmouseover="VWP_swapImage('overview','','http://www.vicsjavascripts.org.uk/StdImages/Three.gif',1);VWP_showHideLayers('overviewnav',this,'show','Mess1')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')"
onclick="window.top.location=e-commerce.htm"
/>
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="Demo" width="97" height="24" border="1" id="demo"
onmouseover="VWP_swapImage('demo','','http://www.vicsjavascripts.org.uk/StdImages/Two.gif',1);VWP_showHideLayers('overviewnav',this,'show','Mess2')"
onmouseout="VWP_swapImgRestore();VWP_showHideLayers('overviewnav','','hide')"
onclick="window.top.location=demo.htm"
/>
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="Sign Up!" width="97" height="24" border="1" id="signup"
onmouseover="VWP_swapImage('signup','','http://www.vicsjavascripts.org.uk/StdImages/Three.gif',1)"
onmouseout="VWP_swapImgRestore()"
onclick="window.top.location=signup.htm"
/>
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="The Mall" width="97" height="24" border="1" id="mall"
onmouseover="VWP_swapImage('mall','','http://www.vicsjavascripts.org.uk/StdImages/Four.gif',1)"
onmouseout="VWP_swapImgRestore()"
onclick="window.top.location=themall.htm"
/>
<img src="http://www.vicsjavascripts.org.uk/StdImages/One.gif" alt="Contact Us" width="99" height="24" border="1" id="contact"
onmouseover="VWP_swapImage('contact','','http://www.vicsjavascripts.org.uk/StdImages/Five.gif',1)"
onmouseout="VWP_swapImgRestore()"
onclick="window.top.location=contact.htm"
/>
</div>
<div id="overviewnav" style="position:absolute;visibility:hidden;width:100px;height:20px"
onmouseover="VWP_showHideLayers('overviewnav',null,'show')"
onmouseout="VWP_showHideLayers('overviewnav',null,'hide')"
><div></div></div>
<div style="position:absolute;visibility:hidden;top:0px;left:0px;" >
<div id="Mess1" style="position:absolute;top:0px;left:0px;width:100px;background-color:red;text-align:center;" >Message 1<br>Message 1<br>Message 1<br>Message 1</div>
<div id="Mess2" style="position:absolute;top:0px;left:0px;width:200px;background-color:blue;text-align:center;" >Message 2</div>
<div id="Mess3" style="position:absolute;top:0px;left:0px;" >Message 3</div>
<div id="Mess4" style="position:absolute;top:0px;left:0px;" >Message 4</div>
</div>
border size inclusion is differed between IE and most browsers,<br>
additional code added so you can adjust manually<br>
<br>
also tidied the HTML a bit<br>
http://www.sitepoint.com/forums/showthread.php?t=312597
</body>
</html>
Thanks again Vic, my only concern about the last code is that it wouldn’t be search engine friendly, would it? Why can the buttons not be part of an <a>?
all according on your priorities, code will work with either HTML
Hi Vic
This might be a shot in the dark, but I’ll try anyway. Can you possibly extend on this code to included a third sub level to show and hide off a link in the second level?
thanks