用html+javascript实现了一个仿flash动画实例,其实做起来也有些难度,主要是动画的移动和图的切换。

先给出实现后的效果图:

html+js 仿flash动画实例

先贴出html代码部分

<div id="playimages" class="play">
   <ul class="big_pic">
      
      <div class="prev"></div>   <!--左按钮 -->
      <div class="next"></div>    <!--右按钮 -->
       
       <div class="text">加载图片说明......</div>
       <div class="length">计算图片数量.....</div>
       <a class="mark_left" href="javascript:;"></a>   //左箭头切换图片
       <a class="mark_right" href="javascript:;"></a>  //右箭头切换图片
       <div class="bg"></div>
         <!-- 这是下面六张图 -->
        <li style="z-index:1;"><img src="image/1.jpg" /></li> 
        <li><img src="image/2.jpg" /></li> 
        <li><img src="image/3.jpg" /></li> 
        <li><img src="image/4.jpg" /></li> 
        <li><img src="image/5.jpg" /></li> 
        <li><img src="image/6.jpg" /></li> 

    </ul>
    <div class="small_pic">
       <ul style="width:390px;">
            <li style=" filter: opacity(100); opacity: 1;"><img src="image/1.jpg" /></li>
            <li><img src="image/2.jpg" /></li>
            <li><img src="image/3.jpg" /></li>
            <li><img src="image/4.jpg" /></li>
            <li><img src="image/5.jpg" /></li>
            <li><img src="image/6.jpg" /></li>
       </ul>
    </div>
 </div>

下面主要的js 代码部分

  这是页面加载是触发的js

 

window.οnlοad=function()
{  
   var oDiv=document.getElementById('playimages');
   
   var oBtnPrev=getByClass(oDiv,'prev')[0];
   var oBtnNext=getByClass(oDiv,'next')[0];
   var oMarkLeft=getByClass(oDiv,'mark_left')[0];
   var oMarkRight=getByClass(oDiv,'mark_right')[0];
   
   var oUlBig=getByClass(oDiv,'big_pic')[0];
   var aLiBig=oUlBig.getElementsByTagName('li');
   
   var oDivsmall=getByClass(oDiv,'small_pic')[0];
   var oUlSmall=oDivsmall.getElementsByTagName('ul')[0];
   var aLiSmall=oDivsmall.getElementsByTagName('li');
   
    //记录当前点击的是第几张图片(上一张/下一张)
   
   var nowZIndex=2; 
   
   var now=0;
   
   oUlSmall.style.width=aLiSmall.length*aLiSmall[0].offsetWidth+'px';
   
   //左右按钮
   oBtnPrev.οnmοuseοver=oMarkLeft.οnmοuseοver=function()
   {
      startMove(oBtnPrev,'opacity',100);
      
   };
   oBtnPrev.οnmοuseοut=oMarkLeft.οnmοuseοut=function()
   {   
      startMove(oBtnPrev,'opacity',0);
   };
   
   oBtnNext.οnmοuseοver=oMarkRight.οnmοuseοver=function()
   {
      startMove(oBtnNext,'opacity',100);
      
   };
   oBtnNext.onmuseout=oMarkRight.οnmοuseοut=function()
   {   
      startMove(oBtnNext,'opacity',0);
   };
   
   //大图切换
   for( var i=0;i<aLiSmall.length; i++)
   {  
       aLiSmall[i].index=i; 
      aLiSmall[i].οnclick=function()
      {    
         if(this.index==now) return;//当index与now,说明当前单击是同一张图片
         
         now=this.index;//否则就把下一张付给now 
         Tab();    
      };
      
      aLiSmall[i].οnmοuseοver=function() //设置当前小图的透明度
       {
          startMove(this,'opacity',100);
       };
      
      aLiSmall[i].οnmοuseοut=function()
      {
         
          if(this.index!=now)
          {    
               startMove(this,'opacity',60);
          }  
      };   
   }
   function Tab()
   {
      aLiBig[now].style.zIndex=nowZIndex++;//设置当前上图显示的是第几张图片(设置图片的层数)
         
          for( var i=0;i<aLiSmall.length;i++)
          { 
             startMove(aLiSmall[i],'opacity',60);
          }
          startMove(aLiSmall[now],'opacity',100);
          
         aLiBig[now].style.height=0;//当前大图由上往下拉,改变当前图片的高度  
         startMove(aLiBig[now],'height',320);
         
         if(now==0)
         {
            startMove(oUlSmall,'left',0);
         }
         else if(now==aLiSmall.length-1)
         {
            startMove(oUlSmall,'left',-(now-2)*aLiSmall[0].offsetWidth);
         }
         else
         {
             startMove(oUlSmall,'left',-(now-1)*aLiSmall[0].offsetWidth);
         }
   }  
   
   //上一张雨下一张的切换
   oBtnPrev.οnclick=function()
   {
      now--;
      if(now==-1)
      {
         now=aLiSmall.length-1;
      }
      Tab();
   };
   oBtnNext.οnclick=function()
   {
      now++;
      if(now==aLiSmall.length)
      {
         now=0;
      }
      Tab();
   };
   var timer=setInterval(oBtnNext.onclick,2000);
   
   oDiv.οnmοuseοver=function()
   {
       clearInterval(timer);
   };
    oDiv.οnmοuseοut=function()
   {
      timer=setInterval(oBtnNext.onclick,2000);
   };
   
};

下面是方法调用

function getStyle(obj, name) 
{     
   if(obj.currentStyle)
   {   
      return obj.currentStyle[name];
   }
   else
    {   
      return getComputedStyle(obj,false)[name];
      
   }
}

function startMove(obj,atrr,iTarget) 
{    
   clearInterval(obj.timer);
   obj.timer=setInterval(function()
   {       
      var cur=0; 
      if(atrr=='opacity')
      {
         cur=Math.round(parseFloat(getStyle(obj, atrr))*100);
      }
      else
      {
         cur=parseInt(getStyle(obj, atrr));
      }
      
      var speed=(iTarget-cur)/6;
      speed=speed>0?Math.ceil(speed):Math.floor(speed);
      
      if(cur==iTarget)
      {  
         clearInterval(obj.timer);
      }
      else
      {  
         if(atrr=='opacity')
         {
            obj.style.filter='alpha(opacity:'+(cur+speed)+')';
            obj.style.opacity=(cur+speed)/100;   
            
            //document.getElementById('txt1').value=obj.style.opacity;
         }
         else
         {
              obj.style[atrr]=cur+speed+'px'; 
         }
      }
  },30);
   
} 

function getByClass(oParent, aClass)
{
    //alert('a')
    var aEle=oParent.getElementsByTagName('*');
    var aResult=[];   
    
    for(var i=0;i<aEle.length;i++)
    {
       if(aEle[i].className==aClass)
       {
          aResult.push(aEle[i]);
       }
    }
    return aResult;
}

代码就完了,运行这个html就能看到所上的效果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章: