Mi primera publicación aquí. Quiero hacer un menú horizontal con el submenú deslizándose hacia abajo en mouseover. Sé que podría usar jQuery, pero esto es para practicar mis habilidades de javascript.Problemas con múltiples setIntervals ejecutándose simultáneamente
uso el siguiente código:
var up = new Array()
var down = new Array()
var submenustart
function titleover(headmenu, inter)
{
submenu = headmenu.lastChild
up[inter] = window.clearInterval(up[inter])
down[inter] = window.setInterval("slidedown(submenu)",1)
}
function slidedown(submenu)
{
if(submenu.offsetTop < submenustart)
{
submenu.style.top = submenu.offsetTop + 1 + "px"
}
}
function titleout(headmenu, inter)
{
submenu = headmenu.lastChild
down[inter] = window.clearInterval(down[inter])
up[inter] = window.setInterval("slideup(submenu)", 1)
}
function slideup(submenu)
{
if(submenu.offsetTop > submenustart - submenu.clientHeight + 1)
{
submenu.style.top = submenu.offsetTop - 1 + "px"
}
}
El submenustart variables se nombró a un valor en otra función que no es relevante para mi pregunta.
HTML se parece a esto:
<table class="hoofding" id="hoofding">
<tr>
<td onmouseover="titleover(this, 0)" onmouseout="titleout(this, 0)"><a href="#" class="hoofdinglink" id="hoofd1">AAAA</a>
<table class="menu">
<tr><td><a href="...">1111</a></td></tr>
<tr><td><a href="...">2222</a></td></tr>
<tr><td><a href="...">3333</a></td></tr>
</table></td>
<td onmouseover="titleover(this, 1)" onmouseout="titleout(this, 1)"><a href="#" class="hoofdinglink">BBBB</a>
<table class="menu">
<tr><td><a href="...">1111</a></td></tr>
<tr><td><a href="...">2222</a></td></tr>
<tr><td><a href="...">3333</a></td></tr>
<tr><td><a href="...">4444</a></td></tr>
<tr><td><a href="...">5555</a></td></tr>
</table></td>
...
</tr>
</table>
Lo que ocurre es lo siguiente:
Si voy cambio y fuera (por ej) Un menú que trabaja muy bien. Si voy ahora sobre el menú B, el intervalo aplicado a A ahora se aplica a B. Ahora hay 2 funciones de intervalo aplicadas a B. La originalmente para A y una nueva activada por el mouseover en B. Si quisiera ir a A todos los intervalos ahora se aplican a A.
He estado buscando horas pero estoy completamente atascado.
Gracias de antemano.
no olvides llamar a 'clearInterval' cuando termines de animar. –
Gracias por el comentario, pero era consciente de esto. Añadí este clearInterval más tarde. –