http://snook.ca/technical/jquery-bg/
大家看这个例子:
Example A: Top down菜单的蓝色由上向下滑动,鼠标离开时再滑动还原。原来这个菜单是用的是Jquery+插件做的!
这个菜单的原理很简单:就是控制了菜单的背景图片上下移动,所以看到这种效果!我想用JavaScript写个但是遇到麻烦事了,高分求个思路!以下是一些代码 实现背景的移动!
             var position =obj.style.backgroundPosition.replace(/px/g," ");//菜单对象
             xy = position.split(" ");
             x = xy[0];
             y = xy[2]; 
             y = parseInt(y);
             y=y+5;//让菜单的背景的TOP值+5
            obj.style.backgroundPosition= x+"px "+y+"px";//重新给背景图片的Position属性赋值
            我使用 window.setInterval 函数实现其不停的移动(向上向下)window.setInterval(function(){.........})
问题出来了:IE是单线程,比如说:鼠标落在菜单1上,菜单1的背景图片
就要向下移动,这时鼠标离开 菜单1 ,鼠标悬浮到 菜单2 的时候 ,会同时执行 菜单1的向上移动 和菜单2的向下移动(就像多线程那个样子)。
假如鼠标移动的很快可能是 菜单1 菜单2 菜单3 同时移动。小弟在此请教JavaScript版块的高手 谢谢!!!!!

解决方案 »

  1.   

    jquery 那个菜单移动速度 是挺快,但是你把鼠标放到俩菜单中间 就发现,他们会同时向上向下移动了
      

  2.   

    小晕一下, IE的单线程并不是表示只能执行一个interval, 你可以设3个(或者做成可扩展的根据你的menu数量而变化的多个)interval, 每个interval专门执行一个menu的动画效果. 少量的话不会有问题.除非interval过多, 这时IE的单线程处理就会表现的很明显, 过多的时间片分配会导致动画误差可以通过肉眼明显的感觉出来. LZ自己试一下就可以了
      

  3.   


    ani1 = window.setInterval(function(){}, speed);和window.clearInterval(ani1);这是好习惯
      

  4.   

    Javascript的线程就是通过setInterval或setTimeout来模拟的,所以楼主可以完全放心线程这块的问题.
      

  5.   

    DOM都是事件驱动的,不同事件是在不同的线程里的
      

  6.   

    鼠标在菜单1和菜单2上触发的两次function是在不同的线程里执行的。互不影响的。除非里面用到了同一个全局变量
      

  7.   


    <script>
    var num=[0,0,0]
    var ids={}
    function over(el){
    clearInterval(ids[el.id]);
    ids[el.id]=setInterval(function(){
    var a=num[el.id]++;
    el.innerHTML=a;
    },100);
    }
    function out(el){
    clearInterval(ids[el.id]);
    ids[el.id]=setInterval(function(){
    var a=num[el.id]--;
    if(a<=0){
    num[el.id]=0
    el.innerHTML="离开"
    clearInterval(ids[el.id]);
    return;
    }
    el.innerHTML=a;
    },100);

    }
    </script>
    <button onmouseover='over(this)' onmouseout="out(this)" id="0" style="width:100px">离开</button>
    <button onmouseover='over(this)' onmouseout="out(this)" id="1" style="width:100px">离开</button>
    <button onmouseover='over(this)' onmouseout="out(this)" id="2" style="width:100px">离开</button>
      

  8.   

    想用JS多线程,下载这个JS库就可以:http://jsthread.sourceforge.net/cgi-bin/wiki/wiki.cgi
      

  9.   

    我想的是最好不用什么库 用自己的js代码实现。再说那个库500多k