PDA

View Full Version : Help with tabs (mouseover) navigation menu



adjwatson
04-15-2005, 03:44 PM
Hiya all

I'm trying to use the below menu and think it's great and have customised it quite well
link to DD's tabs navigation menu (http://www.dynamicdrive.com/dynamicindex1/tabmouseover.htm)

but I would like my submenus that open beneath to be aligned straight underneath the relevant mainmenu? Can this be done?

ddadmin
04-15-2005, 08:17 PM
There are a few ways to do this. The simpliest (though least flexible way) is simply to modify the HTML for a particular menu content to add a margin-left to it. For example:

submenu[1]='<div style="margin-left: 100px"><b><a href="http://freewarejava.com/applets/index.shtml">Applets</a> | <a href="http://freewarejava.com/tutorials/index.shtml">Tutorials</a> | <a href="http://freewarejava.com/javasites/index.shtml">Sites and Zines</a> | <a href="http://freewarejava.com/jsp/index.shtml">JSP</a></b></div>'

Notice the <div style=margin-left: 100px"> code, which would indent this menu content 100px on the left side.

adjwatson
04-18-2005, 08:04 AM
Thanks and that works well although how could I be able to do it so the submenu aligns perfectly to it's mainmenu automatically?

ddadmin
04-18-2005, 07:50 PM
Ok, I've modified the script quickly for the submenu to auto align with the link that triggers it. Changes are in red:

<body>


<!--Links used to initiate the sub menus. Pass in the desired submenu index numbers (ie: 0, 1) -->
<div id="linkscontainer"><a href="http://www.javascriptkit.com" onMouseover="showit(0, this)">JavaScript Kit</a> | <a href="http://freewarejava.com" onMouseover="showit(1, this)">Freewarejava</a></div>

<!-- Edit the dimensions of the below, plus background color-->
<ilayer width=400 height=32 name="dep1" bgColor="#E6E6FF">
<layer name="dep2" width=400 height=32>
</layer>
</ilayer>
<div id="describe" style="background-color:#E6E6FF;width:400px;height:32px" onMouseover="clear_delayhide()" onMouseout="resetit(event)"></div>


<script language="JavaScript1.2">

/*
Tabs Menu (mouseover)- By Dynamic Drive
For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
This credit MUST stay intact for use
*/

var submenu=new Array()

//Set submenu contents. Expand as needed. For each content, make sure everything exists on ONE LINE. Otherwise, there will be JS errors.

submenu[0]='<div id="mysubmenu"><b><a href="http://www.javascriptkit.com/cutpastejava.shtml">Scripts</a> | <a href="http://www.javascriptkit.com/javaindex.shtml">JS tutorials</a> | <a href="http://www.javascriptkit.com/javatutors/index.shtml">Advanced JS tutorials</a> | <a href="http://www.javascriptkit.com/java/">Applets</a> | <a href="http://www.javascriptkit.com/howto/">Web Tutorials</a></b></div>'

submenu[1]='<div id="mysubmenu"><b><a href="http://freewarejava.com/applets/index.shtml">Applets</a> | <a href="http://freewarejava.com/tutorials/index.shtml">Tutorials</a> | <a href="http://freewarejava.com/javasites/index.shtml">Sites and Zines</a> | <a href="http://freewarejava.com/jsp/index.shtml">JSP</a></b></div>'

//Set delay before submenu disappears after mouse moves out of it (in milliseconds)
var delay_hide=500

/////No need to edit beyond here

var menuobj=document.getElementById? document.getElementById("describe") : document.all? document.all.describe : document.layers? document.dep1.document.dep2 : ""

function showit(which, cur){
clear_delayhide()
thecontent=(which==-1)? "" : submenu[which]
if (document.getElementById||document.all){
menuobj.innerHTML=thecontent
if (typeof cur!="undefined" && parseInt(cur.offsetLeft)>=0){
var divoffset=document.getElementById("linkscontainer").offsetLeft
document.getElementById("mysubmenu").style.marginLeft=cur.offsetLeft-divoffset+"px"
}
}
else if (document.layers){
menuobj.document.write(thecontent)
menuobj.document.close()
}
}

function resetit(e){
if (document.all&&!menuobj.contains(e.toElement))
delayhide=setTimeout("showit(-1)",delay_hide)
else if (document.getElementById&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
delayhide=setTimeout("showit(-1)",delay_hide)
}

function clear_delayhide(){
if (window.delayhide)
clearTimeout(delayhide)
}

function contains_ns6(a, b) {
while (b.parentNode)
if ((b = b.parentNode) == a)
return true;
return false;
}

</script>

To be safe, you may just want to use the entire script above, then change the menu links to your own. Tested in FF1 and IE6 without problems.

adjwatson
04-20-2005, 08:20 AM
Thanks alot