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:
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?
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?