javascript: Problems with multiple setIntervals running simultaniously
        Posted  
        
            by user340879
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by user340879
        
        
        
        Published on 2010-05-14T03:05:51Z
        Indexed on 
            2010/05/14
            3:14 UTC
        
        
        Read the original article
        Hit count: 232
        
Hello,
My first post here. I want to make a horizontal menu with submenu's sliding down on mouseover. I know I could use jQuery but this is to practice my javascript skills.
I use the following code:
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"
 }
}
The variable submenustart gets appointed a value in another function which is not relevant for my question.
HTML looks like this:
<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>
What happens is the following:
If I go over and out (for ex) menu A it works fine.
If i go now over menu B the interval applied to A is now applied to B. There are now 2 interval functions applied to B. The one originally for A and a new one triggered by the mouseover on B.
If I would go to A all the intervals are now applied to A.
I have been searching for hours but and I am completely stuck.
Thanks in advance.
© Stack Overflow or respective owner