首页 新闻 搜索 专区 学院

求解一个小小的问题

0
悬赏园豆:100 [已解决问题] 解决于 2012-12-07 14:09
<script type="text/javascript">

 window.onload=function(){
   var oLi=document.getElementsByTagName("li");
   for(var i=0;i<oLi.length;i++){
    var iMumber=0;
    var arr=[];
    var oP=oLi[i].getElementsByTagName('p')[0];
    oP.timer=null;
    oP.iAlpha=0;//我现在只有这一个疑问,这个属性我把他换成变量(如:var iNum=0)在把下面的所有oP.iAlpha都给替换成iNum它的淡入淡出效果就会变的一闪一闪的很不流畅,这是什么原因
    oLi[i].onmouseover=function(){
      var oP=this.getElementsByTagName('p')[0];
      oP.timer?clearInterval(oP.timer):"";
      oP.iAlpha=100;
      oP.style.opacity=1;
      oP.style.filter='alpha(opacity='+oP.iAlpha+')';
    }
    oLi[i].onmouseout=function(){
       doMove(this.getElementsByTagName('p')[0]);
    }
    
    function doMove(obj){
       obj.timer?clearInterval(obj.timer):"";
       obj.timer=setInterval(function(){
       var iSpeed=5;
       if(obj.iAlpha<=iSpeed){
       clearInterval(obj.timer);
       obj.timer=null;
       obj.iAlpha=0;
       }else{
       obj.iAlpha -=iSpeed;
       }
       obj.style.opacity=obj.iAlpha/100;
       obj.style.filter='alpha(opacity='+obj.iAlpha+')';
     },50);
    }
   }
}
</script>

 

<div id="box">
        <ul class="oUl">
            <li>
                <p></p>
                <div>
                    <a target="_blank" href="baiduc.com">集合一</a>
                </div>
            </li>
            <li>
                <p></p>
                <div>
                    <a target="_blank" href="baiduc.com">集合二</a>
                    <span>2011-03-27</span>
                </div>
            </li>
        </ul>

</div>
严文Live2012的主页 严文Live2012 | 初学一级 | 园豆:36
提问于:2012-12-04 16:24
< >
分享
最佳答案
0

当把 oP.iAlpha 换成 var iNum=0,则所有的 li 节点mouseover、mouseout时,访问的都是同一个 iNum变量

假设现在从 A 节点移出,移如B节点,过程如下:

1)触发A的mouseout事件,假设当前iNum的值为100,则每隔50ms改变iNum的值

2)触发B的mouseover事件,将iNum设置为100

需要注意的是,步骤1)是采取setInterval计时器,从开始到完成需要执行20次,假设分别为 T0、T1、T2。。。T19

在这29个T的执行空隙列,1)事件可能触发,并将iNum设置为100

于是悲剧了,步骤1)的理想步骤本来是 iNum 从100->0,现在可能变成 100->50->100->0

收获园豆:100
程序猿小卡 | 菜鸟二级 |园豆:386 | 2012-12-06 19:11
大匙能不能用再通俗的字眼来解释下,我貌似能懂些了,只是还是有点点困惑
严文Live2012 | 园豆:36 (初学一级) | 2012-12-07 11:54

@严文Live2012: 

关键点是:这里多个节点(li),每个节点的渐隐动画都用到了同一个变量iNum,他们同时都在对它进行修改,且修改的次序很难保证。

程序猿小卡 | 园豆:386 (菜鸟二级) | 2012-12-07 12:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册