Tycoon Talk
Become a Big fish!
The number 1 forum for online business!
Post topics, ask questions, share your knowledge.
Tycoon Talk is part of Freelancer.com - find skilled workers online at a fraction of the cost.

JavaScript Forum


You are currently viewing our JavaScript Forum as a guest. Please register to participate.
Login



Reply
Expand/collapse menu help
Old 12-10-2007, 10:35 AM Expand/collapse menu help
Junior Talker

Posts: 1
Name: Anders
Trades: 0
Hi,
I have found this great script a contracing/expanding Xpmenu at http://www.jswitch.com but I would like some changes to it. Unfortunatley my javascripting and CSS knowledge is very limited therefore I´m asking the kind people here at Webmaster-Talk.

There are 3 difficulties that I need help with.
1. To be able to have a plus/minus icon at the right of the header that expand/contract the submenus. Only the icon should be able to expand/contract the menus.

2. When I press the header (which has a backgroundimage) I would like it to have an ordinare a:active status (the background pic changes to another one) when i press the header only (not the plus/minus icon)
but since the javascript is overriding this function Im not sure how to do it.

3. To be able to have a:active om the submenus as well. Right now I have a mouseover function that changes the color to a darker one. Ive already tried to put an a:active tag but I only get the darker color around the text and not the whole block.
I only need this to work in IE 6/7.

I hope this is possible to do?


Best Regards
Anders


Heres the code:

HTML
-------------------------------------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Collapsible menu</title>
<link href="xpMenu_test.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="menycontainer">
<!-- *********************************Start Menu****************************** -->
<div class="mainDiv">
<div class="topItem">Header 1 </div>
<div class="dropMenu">
<div class="subMenu">
<span class="subItem"><a href="#">Sub 1-1</a></span><br>
<span class="subItem"><a href="#">Sub 1-2</a></span><br>
</div>
</div>
</div>
<div class="mainDiv">
<div class="topItem">Header 2</div>
<div class="dropMenu">
<div class="subMenu">
<span class="subItem"><a href="#">Sub 2-1</a></span><br>
<span class="subItem"><a href="#">Sub 2-2</a></span><br>
</div>
</div>
</div>
<script type="text/javascript" src="xpMenu.js"></script>
</div>
</body>
</html>

-------------------------------------------

/* The CSS */

.menycontainer {float:left; width:212px; height:500px; margin-right:0px; }
.topItem {
PADDING-LEFT: 8px;
padding-top: 4px;
FONT-WEIGHT: bold;
CURSOR: hand;
COLOR: #133354;
FONT-FAMILY: Arial;
HEIGHT: 26px;
TEXT-DECORATION: none;
font-size: 12px;
background-image: url(sdmenu/header_over.gif);
background-repeat: repeat-x;
border-top: #799ace 1px solid;
border-left: #799ace 1px solid;
border-right: 1px solid #799ace;
}
.topItemOver {
PADDING-LEFT: 8px;
padding-top: 4px;
FONT-WEIGHT: bold;
background-image: url(sdmenu/header.gif);
background-repeat: repeat-x;
CURSOR: hand;
COLOR: #133354;
FONT-FAMILY: Arial;
HEIGHT: 26px;
TEXT-DECORATION: none;
font-size: 12px;
border-top: #799ace 1px solid;
border-left: #799ace 1px solid;
border-right: #799ace 1px solid;
}
.dropMenu {
BORDER-TOP: #799ace 1px solid; BACKGROUND: #ffffff; FILTER: alpha(opacity=100);
}
.subMenu {DISPLAY: block;}
.subItem {
width:100%;
PADDING-LEFT: 9px;
FONT-WEIGHT: normal;
CURSOR: hand;
COLOR: #000000;
HEIGHT: 22px;
TEXT-DECORATION: none;
font-family: Arial;
font-size: 12px;
background-color: #fff;
padding-top: 3px;
border-bottom: 1px solid #c0d0e8;
}
.subItem a {background-color: #fff;width:100%;COLOR: #000000;TEXT-DECORATION: none;}
.subItemOver {background-color: #f2f5fa;width:100%;font-family: Arial;font-size: 12px; PADDING-LEFT: 9px; padding-top: 3px; FONT-WEIGHT: normal; CURSOR: hand; HEIGHT: 22px; border-bottom: 1px solid #c0d0e8;}
.subItemOver a {width:100%; COLOR: #000000; TEXT-DECORATION: none}
.drop {
BORDER-RIGHT: black 1px solid; BORDER-LEFT: black 1px solid
}
-------------------------------------------

Javascript


var menuObjArray = new Array();
menuObjArray[0] = new Array();
menuObjArray[1] = new Array();
menuObjArray[2] = new Array();
menuObjArray[3] = new Array();
menuObjArray[4] = new Array();
menuObjArray[5] = new Array();
menuObjArray[6] = new Array();
menuObjArray[7] = new Array();
var timerSlide = null;
var numMenuItem = 0;
var slideDelay = 1;
var divHeight = 25;
var moveSlidePix = 20;
var isLocked = false;
var doFading = false;
InitAll();
function InitAll() {
var divs = document.getElementsByTagName("DIV");
menuStateAry = GetUserCookie("xpMenuCookv2").split(",");
aryNum = 0;
for(dn=0; dn < divs.length;dn++) {
if(String(divs.item(dn).className).substring(0,7) == "topItem") {
mainMenuDiv = divs.item(dn).parentNode;
menuContainerDiv= mainMenuDiv.getElementsByTagName("DIV").item(1);
itemContainerDiv= menuContainerDiv.getElementsByTagName("DIV").item( 0);
if(menuStateAry != 0)
itemContainerDiv.style.height = parseInt(menuStateAry[aryNum]) + "px";
if(!doFading) {
if (menuContainerDiv.filters)
menuContainerDiv.filters.alpha.opacity = 100;
else
menuContainerDiv.opacity = 1;
}
if(menuStateAry != 0 ) {
if( parseInt(menuStateAry[aryNum]) == 0)
itemContainerDiv.style.display = 'none';
else
itemContainerDiv.style.display = 'inline';
}
Init(divs.item(dn));
aryNum++;
}
}
}
function Init(objDiv) {
if (isLocked)
return;
var mainMenuDiv, subMenuDiv, menuContainerDiv, itemContainerDiv,styleRules;
for(r=0;r < document.styleSheets.length; r++) {
if( -1 != String(document.styleSheets[r].href).indexOf("xpMenu_test.css") )
break;
}
if(!document.styleSheets[r].rules)
styleRules = document.styleSheets[r].cssRules;
else
styleRules = document.styleSheets[r].rules;
numMenuItem = 0;
mainMenuDiv = objDiv.parentNode;
subMenuDiv = mainMenuDiv.getElementsByTagName("DIV").item(0);
menuContainerDiv= mainMenuDiv.getElementsByTagName("DIV").item(1);
itemContainerDiv= menuContainerDiv.getElementsByTagName("DIV").item( 0);
aLen = menuObjArray[0].length;
for (i=0 ;i < aLen ; i++) {
if (menuObjArray[0][i] == menuContainerDiv) {
break;
}
}
if (i == aLen) {
menuObjArray[0][i] = menuContainerDiv;
menuObjArray[1][i] = itemContainerDiv;
menuObjArray[7][i] = subMenuDiv;
subMenuDiv.onclick = SetSlide;
lastmenuNum = -1;
for (b=0;b<itemContainerDiv.childNodes.length;b++) {
if (itemContainerDiv.childNodes.item(b).tagName == "SPAN") {
numMenuItem ++;
itemContainerDiv.childNodes.item(b).onmouseover= ChangeStyle;
itemContainerDiv.childNodes.item(b).onmouseout= ChangeStyle;
lastmenuNum = b;
}
}
for(r=0;r < styleRules.length; r++) {
tmpStr1 = String(styleRules[r].selectorText);
tmpStr2 = String("." + itemContainerDiv.childNodes.item(lastmenuNum).clas sName);
if(tmpStr1 == tmpStr2) {
if(NaN != parseInt(styleRules[r].style.height)) {
divHeight = parseInt(styleRules[r].style.height);
break;
}
}
}
menuObjArray[2][i] = numMenuItem;
menuObjArray[3][i] = mainMenuDiv;
if (itemContainerDiv.style.display == "inline") {
menuObjArray[4][i] = numMenuItem * divHeight;
menuObjArray[0][i].style.height = numMenuItem * divHeight + "px";
menuObjArray[6][i] = true;
if(doFading) {
if (menuObjArray[0][i].filters)
menuObjArray[0][i].filters.alpha.opacity = 100;
else
menuObjArray[0][i].style.opacity = 1;
}
} else {
menuObjArray[7][i].className = menuObjArray[7][i].className+"Over";
menuObjArray[4][i] = 0;
menuObjArray[0][i].style.height = 0 + "px";
menuObjArray[6][i] = false;
if(doFading) {
if (menuObjArray[0][i].filters)
menuObjArray[0][i].filters.alpha.opacity = 0;
else
menuObjArray[0][i].style.opacity = .0;
}
}
}//end if
mainMenuDiv = null;
subMenuDiv = null;
menuContainerDiv= null;
itemContainerDiv= null;
}
function SetSlide() {
if (isLocked)
return;
else
isLocked = true;
for (i=0 ;i < menuObjArray[0].length; i++) {
if (menuObjArray[3][i] == this.parentNode) {
if (menuObjArray[5][i] == null)
menuObjArray[5][i] = setInterval("RunSlide(" + i + ")", slideDelay);
break;
}
}
}

function UpdateUserCookie(aryIndex) {
date = new Date();
date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * 30));
document.cookie = "xpMenuCookv2" + "=" + escape(menuObjArray[4].toString()) + "; expires=" + date.toGMTString();
}
function GetUserCookie(crumbName) {
colCookie = document.cookie.split("; ");
for (a=0; a < colCookie.length; a++) {
colCrumb = colCookie[a].split("=");
if(colCrumb[0] == crumbName)
return unescape(colCrumb[1]);
}
return "";
}

function RunSlide(objIndex) {
if (menuObjArray[6][objIndex]) {
if(doFading) {
if(menuObjArray[0][objIndex].filters)
menuObjArray[0][objIndex].filters.alpha.opacity -= 100/ ( ( (menuObjArray[2][i] * divHeight) / moveSlidePix) +1);
else
menuObjArray[0][objIndex].style.opacity -= .9/(((menuObjArray[2][i] * divHeight) / moveSlidePix)+1);
}
menuObjArray[1][objIndex].style.display = 'none';
menuObjArray[4][objIndex] -= moveSlidePix;
if (menuObjArray[4][objIndex] > 0)
menuObjArray[0][objIndex].style.height = menuObjArray[4][i] + "px";
else {
if(doFading) {
if(menuObjArray[0][objIndex].filters)
menuObjArray[0][objIndex].filters.alpha.opacity = 0;
else
menuObjArray[0][objIndex].style.opacity = 0;
}
menuObjArray[7][objIndex].className = menuObjArray[7][objIndex].className+"Over";
menuObjArray[4][objIndex] = 0;
menuObjArray[0][objIndex].style.height = 0 + "px";
clearInterval(menuObjArray[5][objIndex]);
menuObjArray[5][objIndex] = null;
menuObjArray[6][objIndex] = false;
isLocked = false;
UpdateUserCookie(objIndex);
return 0;
}
return 0;
}
if (!menuObjArray[6][objIndex]) {
if(doFading) {
if(menuObjArray[0][objIndex].filters)
menuObjArray[0][objIndex].filters.alpha.opacity += 100/ ( ( (menuObjArray[2][i] * divHeight) / moveSlidePix) +1);
else {
opcVal = parseFloat(menuObjArray[0][objIndex].style.opacity);
opcVal += .9/((menuObjArray[2][i] * divHeight) / moveSlidePix);
menuObjArray[0][objIndex].style.opacity = opcVal;
}
}
menuObjArray[4][objIndex] += moveSlidePix;
if (menuObjArray[4][objIndex] < (menuObjArray[2][objIndex] * divHeight))
menuObjArray[0][objIndex].style.height = menuObjArray[4][i] + "px";
else {
if(doFading) {
if(menuObjArray[0][objIndex].filters)
menuObjArray[0][objIndex].filters.alpha.opacity = 100;
else
menuObjArray[0][objIndex].style.opacity = 1;
}
strClassName = String(menuObjArray[7][objIndex].className);
menuObjArray[7][objIndex].className = strClassName.substring(0,strClassName.length - 4);
menuObjArray[4][objIndex] = (menuObjArray[2][objIndex] * divHeight);
menuObjArray[0][objIndex].style.height = (menuObjArray[2][objIndex] * divHeight)+ "px";
menuObjArray[1][objIndex].style.display = 'inline';
clearInterval(menuObjArray[5][objIndex]);
menuObjArray[5][objIndex] = null;
menuObjArray[6][objIndex] = true;
isLocked = false;
UpdateUserCookie(objIndex);
return 0;
}
return 0;
}
}
function ChangeStyle() {
className = String(this.className);
if (className.substring(className.length - 4, className.length) == "Over")
this.className = className.substring(0,className.length - 4);
else
this.className = this.className + "Over";
}


Heres also a .zip with all 3 docs.
Attached Files
File Type: zip sdmenu.zip (3.6 KB, 2 views)
wargon is offline
Reply With Quote
View Public Profile
 
 
Register now for full access!
Reply     « Reply to Expand/collapse menu help
 

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off





   
RSS Feed  Feeds: RSS   JS   XML
RSS Feed  Feeds for this forum: RSS   JS   XML



Page generated in 0.12064 seconds with 13 queries