sidvorak
03-30-2004, 05:57 PM
Ok, I just tried to make this post and got logged out when I hit preview, so this time around it's gonna be much shorter as my patience has run out.
...Over at gazingus.org (http://gazingus.org/html/Using_Lists_for_DHTML_Menus.html) there is a sweet little bit of code that uses the DOM to make dropdown menus.
I have altered the code (see below) to make the menus appear on the first mousover instead of the onClick event.
However, they never go away. I'm trying to figure out how make the last menu open disappear after a short delay. I've already tried this
actuator.onmouseout=function(){
if(currentMenu){
setTimeout('currentMenu.style.visibility = "hidden";',2000);
}
}
However, it doesn't work. The delayed code events pile up on each other if menus are continually moused over and out. (Say the user can't decide what menu they're looking for and runs the mouse left...then right...then left...)
The result is that after the 2000ms the menus close instantly....
any ideas?
Cheers,
Simon Dvorak (http://www.simondvorak.com)
/*
* menuDropdown.js - implements an dropdown menu based on a HTML list
* Author: Dave Lindquist (http://www.gazingus.org)
*/
var currentMenu = null;
if (!document.getElementById)
document.getElementById = function() { return null; }
function initializeMenu(menuId, actuatorId,position) {
var menu = document.getElementById(menuId);
var actuator = document.getElementById(actuatorId);
if (menu == null || actuator == null) return;
if (window.opera) return; // I'm too tired
actuator.onmouseover = function() {
if (currentMenu == null) {
this.showMenu(position);
}
else if(currentMenu) {
currentMenu.style.visibility = "hidden";
this.showMenu(position);
}
return false;
}
actuator.onmouseout = function() {
if(currentMenu){
setTimeout('currentMenu.style.visibility = "hidden";',2000);
return false;}}
actuator.showMenu = function(position) {
if (document.all){
menu.style.left = this.offsetLeft + 80 - position + "px";
}
else {
menu.style.left = this.offsetLeft - position + "px";
}
menu.style.top = this.offsetTop + this.offsetHeight + 2 + "px";
menu.style.visibility = "visible";
currentMenu = menu;
}
}
...Over at gazingus.org (http://gazingus.org/html/Using_Lists_for_DHTML_Menus.html) there is a sweet little bit of code that uses the DOM to make dropdown menus.
I have altered the code (see below) to make the menus appear on the first mousover instead of the onClick event.
However, they never go away. I'm trying to figure out how make the last menu open disappear after a short delay. I've already tried this
actuator.onmouseout=function(){
if(currentMenu){
setTimeout('currentMenu.style.visibility = "hidden";',2000);
}
}
However, it doesn't work. The delayed code events pile up on each other if menus are continually moused over and out. (Say the user can't decide what menu they're looking for and runs the mouse left...then right...then left...)
The result is that after the 2000ms the menus close instantly....
any ideas?
Cheers,
Simon Dvorak (http://www.simondvorak.com)
/*
* menuDropdown.js - implements an dropdown menu based on a HTML list
* Author: Dave Lindquist (http://www.gazingus.org)
*/
var currentMenu = null;
if (!document.getElementById)
document.getElementById = function() { return null; }
function initializeMenu(menuId, actuatorId,position) {
var menu = document.getElementById(menuId);
var actuator = document.getElementById(actuatorId);
if (menu == null || actuator == null) return;
if (window.opera) return; // I'm too tired
actuator.onmouseover = function() {
if (currentMenu == null) {
this.showMenu(position);
}
else if(currentMenu) {
currentMenu.style.visibility = "hidden";
this.showMenu(position);
}
return false;
}
actuator.onmouseout = function() {
if(currentMenu){
setTimeout('currentMenu.style.visibility = "hidden";',2000);
return false;}}
actuator.showMenu = function(position) {
if (document.all){
menu.style.left = this.offsetLeft + 80 - position + "px";
}
else {
menu.style.left = this.offsetLeft - position + "px";
}
menu.style.top = this.offsetTop + this.offsetHeight + 2 + "px";
menu.style.visibility = "visible";
currentMenu = menu;
}
}