Archief - JavaScript: Navigatie, moeilijke combinatie...

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

PieterJ

Legacy Member
Mijn vorige post over dit navigatie systeem was nog hoe ik het moet gebruiken. Dit heb ik ondertussen min of meer gevonden, maar ik ben tot de ontdekking gekomen dat dit menu een beetje te omslachtig is?

Dit was het script:

Code:
//slidelinks.js 
/***************************************************** 
* ypSlideOutMenu 
* 3/04/2001 
* 
* a nice little script to create exclusive, slide-out 
* menus for ns4, ns6, mozilla, opera, ie4, ie5 on 
* mac and win32. I've got no linux or unix to test on but 
* it should(?) work... 
* 
* --youngpup-- 
*****************************************************/ 
ypSlideOutMenu.Registry = [] 
ypSlideOutMenu.aniLen = 250 
ypSlideOutMenu.hideDelay = 1000 
ypSlideOutMenu.minCPUResolution = 10 

// constructor 
function ypSlideOutMenu(id, dir, left, top, width, height) 
{ 
this.ie = document.all ? 1 : 0 
this.ns4 = document.layers ? 1 : 0 
this.dom = document.getElementById ? 1 : 0 

if (this.ie || this.ns4 || this.dom) { 
this.id = id 
this.dir = dir 
this.orientation = dir == "left" || dir == "right" ? "h" : "v" 
this.dirType = dir == "right" || dir == "down" ? "-" : "+" 
this.dim = this.orientation == "h" ? width : height 
this.hideTimer = false 
this.aniTimer = false 
this.open = false 
this.over = false 
this.startTime = 0 

// global reference to this object 
this.gRef = "ypSlideOutMenu_"+id 
eval(this.gRef+"=this") 

// add this menu object to an internal list of all menus 
ypSlideOutMenu.Registry[id] = this 

var d = document 

var strCSS = '<style type="text/css">'; 
strCSS += '#' + this.id + 'Container { visibility:hidden; ' 
strCSS += 'left:' + left + 'px; ' 
strCSS += 'top:' + top + 'px; ' 
strCSS += 'overflow:hidden; z-index:10000; }' 
strCSS += '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; ' 
strCSS += 'width:' + width + 'px; ' 
strCSS += 'height:' + height + 'px; ' 
strCSS += 'clip:rect(0 ' + width + ' ' + height + ' 0); ' 
strCSS += '}' 
strCSS += '</style>'; 

d.write(strCSS) 

this.load() 
} 
} 

ypSlideOutMenu.prototype.load = function() { 
var d = document 
var lyrId1 = this.id + "Container" 
var lyrId2 = this.id + "Content" 
var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1] 
if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2) 
var temp 

if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()", 100) 
else { 
this.container = obj1 
this.menu = obj2 
this.style = this.ns4 ? this.menu : this.menu.style 
this.homePos = eval("0" + this.dirType + this.dim) 
this.outPos = 0 
this.accelConst = (this.outPos - this.homePos) / ypSlideOutMenu.aniLen / ypSlideOutMenu.aniLen 

// set event handlers. 
if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT); 
this.menu.onmouseover = new Function("ypSlideOutMenu.showMenu('" + this.id + "')") 
this.menu.onmouseout = new Function("ypSlideOutMenu.hideMenu('" + this.id + "')") 

//set initial state 
this.endSlide() 
} 
} 

ypSlideOutMenu.showMenu = function(id) 
{ 
var reg = ypSlideOutMenu.Registry 
var obj = ypSlideOutMenu.Registry[id] 

if (obj.container) { 
obj.over = true 

// close other menus. 
for (menu in reg) if (id != menu) ypSlideOutMenu.hide(menu) 

// if this menu is scheduled to close, cancel it. 
if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) } 

// if this menu is closed, open it. 
if (!obj.open && !obj.aniTimer) reg[id].startSlide(true) 
} 
} 

ypSlideOutMenu.hideMenu = function(id) 
{ 
// schedules the menu to close after <hideDelay> ms, which 
// gives the user time to cancel the action if they accidentally moused out 
var obj = ypSlideOutMenu.Registry[id] 
if (obj.container) { 
if (obj.hideTimer) window.clearTimeout(obj.hideTimer) 
obj.hideTimer = window.setTimeout("ypSlideOutMenu.hide('" + id + "')", ypSlideOutMenu.hideDelay); 
} 
} 

ypSlideOutMenu.hide = function(id) 
{ 
var obj = ypSlideOutMenu.Registry[id] 
obj.over = false 

if (obj.hideTimer) window.clearTimeout(obj.hideTimer) 

// flag that this scheduled event has occured. 
obj.hideTimer = 0 

// if this menu is open, close it. 
if (obj.open && !obj.aniTimer) obj.startSlide(false) 
} 

ypSlideOutMenu.prototype.startSlide = function(open) { 
this[open ? "onactivate" : "ondeactivate"]() 
this.open = open 
if (open) this.setVisibility(true) 
this.startTime = (new Date()).getTime() 
this.aniTimer = window.setInterval(this.gRef + ".slide()", ypSlideOutMenu.minCPUResolution) 
} 

ypSlideOutMenu.prototype.slide = function() { 
var elapsed = (new Date()).getTime() - this.startTime 
if (elapsed > ypSlideOutMenu.aniLen) this.endSlide() 
else { 
var d = Math.round(Math.pow(ypSlideOutMenu.aniLen-elapsed, 2) * this.accelConst) 
if (this.open && this.dirType == "-") d = -d 
else if (this.open && this.dirType == "+") d = -d 
else if (!this.open && this.dirType == "-") d = -this.dim + d 
else d = this.dim + d 

this.moveTo(d) 
} 
} 

ypSlideOutMenu.prototype.endSlide = function() { 
this.aniTimer = window.clearTimeout(this.aniTimer) 
this.moveTo(this.open ? this.outPos : this.homePos) 
if (!this.open) this.setVisibility(false) 
if ((this.open && !this.over) || (!this.open && this.over)) { 
this.startSlide(this.over) 
} 
} 

ypSlideOutMenu.prototype.setVisibility = function(bShow) { 
var s = this.ns4 ? this.container : this.container.style 
s.visibility = bShow ? "visible" : "hidden" 
} 
ypSlideOutMenu.prototype.moveTo = function(p) { 
this.style[this.orientation == "h" ? "left" : "top"] = this.ns4 ? p : p + "px" 
} 
ypSlideOutMenu.prototype.getPos = function(c) { 
return parseInt(this.style[c]) 
} 

// events 
ypSlideOutMenu.prototype.onactivate = function() { } 
ypSlideOutMenu.prototype.ondeactivate = function() { } 

/*hieronder staat het deel dat je moet invoegen op de pagina waar je het menu wilt 
*\ 

<script language= "javascript" src="ypSlideOutMenus.js"></script> 
<script language="javascript"> 
new ypSlideOutMenu("menu1", "down", 102, 19, 86, 90) //function ypSlideOutMenu(id, dir, left, top, width, height) --> dit zijn de parameters die ermee overeen moeten komen 

</script> 

<table cellpadding="0" cellspacing="0" border="0" width="516"> 
<tr> 
<td width="86"><a href="http://www.google.com" onmouseover="MM_swapImgRestore();MM_swapImage('aboutblender','','Over/Home.jpg',1);ypSlideOutMenu.showMenu('menu1')" onmouseout="ypSlideOutMenu.hideMenu('menu1');MM_swapImgRestore()"><img src="Normaal/Home.jpg" width="86" height="18" alt="Home" border="0" id="aboutblender" name="aboutblender" /></a></td> 
</tr> 
<tr> 
<td colspan="15" bgcolor="#092C46" height="1" style="height: 1px; background-color: #092C46;"></td> 
</tr> 
</table> 

<div id="menu1Container"> 
<div id="menu1Content" style="position: relative; left: 0; filter:alpha(opacity=93); text-align: left;"> 
<table cellpadding="0" cellspacing="0" border="0"> 
<tr><td><a href="http://www.msn.be" onmouseover="MM_swapImage('één','','Over/Sub/Sub1.jpg',1)" onmouseout="MM_swapImgRestore()"><img src="Normaal/Sub/Sub1.jpg" width="86" height="18" alt="één" border="0" id="één" name="één" /></a></td></tr> 
<tr><td><a href="http://www.msn.be" onmouseover="MM_swapImage('twee','','Over/Sub/Sub2.jpg',1)" onmouseout="MM_swapImgRestore()"><img src="Normaal/Sub/Sub2.jpg" width="86" height="18" alt="twee" border="0" id="twee" name="twee" /></a></td></tr> 
<tr><td><a href="http://www.msn.be" onmouseover="MM_swapImage('drie','','Over/Sub/Sub3.jpg',1)" onmouseout="MM_swapImgRestore()"><img src="Normaal/Sub/Sub3.jpg" width="86" height="18" alt="drie" border="0" id="drie" name="drie" /></a></td></tr> 
<tr><td><a href="http://www.msn.be" onmouseover="MM_swapImage('vier','','Over/Sub/Sub4.jpg',1)" onmouseout="MM_swapImgRestore()"><img src="Normaal/Sub/Sub4.jpg" width="86" height="18" alt="vier" border="0" id="vier" name="vier" /></a></td></tr> 
<tr><td><a href="http://www.msn.be" onmouseover="MM_swapImage('vijf','','Over/Sub/Sub5.jpg',1)" onmouseout="MM_swapImgRestore()"><img src="Normaal/Sub/Sub5.jpg" width="86" height="18" alt="vijf" border="0" id="vijf" name="vijf" /></a></td></tr> 
</table> 
</div> 
</div>

Als je een beetje doorzicht in webdesign (zelfs ik kan het zien), heb je al snel door dat dit menu per item telkens gebruik maakt van 2 afbeeldingen, 1 als gewone weergave en 1 als rollover. Nu vind ik dit nogal een omslachtige manier van werken.

Daarom was mijn vraag, is het niet mogelijk (ik denk wel dat dit een hele karwei is...of toch niet?) om gebruik te maken van de effecten van dit menu, maar in plaats van afbeeldingen die de verschillende items, onderdelen en kleuren van je menu bepalen, dit eenzijdig vast te leggen zonder dat je gebruik maakt van afbeeldingen?

Een beetje zoals in dit menu-systeem:
http://users.skynet.be/javascript/menus/menu2balk.htm


Mijn vraag is dus eigenlijk: kan iemand de grafische effecten van het eerste menu combineren met het vrijwel eenvoudige itemssysteem en kleurenbepaling van het twee menu?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan