维科家纺 發表於 2019-8-6 21:08:00

JavaScript 轮播图(含过渡动画)

<div class="cnblogs_code">
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
      &lt;meta charset="UTF-8"&gt;
      &lt;title&gt;&lt;/title&gt;
      &lt;style type="text/css"&gt;
            *<span style="color: rgba(0, 0, 0, 1)">{
                list</span>-<span style="color: rgba(0, 0, 0, 1)">style: none;
                margin: </span>0<span style="color: rgba(0, 0, 0, 1)">;
                padding: </span>0<span style="color: rgba(0, 0, 0, 1)">;
            }
            #outer{
                width: 320px;
                height: 300px;
                margin: 50px auto;
                background</span>-<span style="color: rgba(0, 0, 0, 1)">color: lightpink;
                padding: 12px 0px ;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">上右下左</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
                overflow: hidden;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">隐藏溢出内容</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
                position: relative;
            }
            #imgList{
                width: ;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">用js来自动设置#imgList宽度</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
                position: absolute; </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">子元素相对父元素的绝对定位</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
                left:;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">每移320px 到下一张</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
               
            }
            #imgList li{
                </span><span style="color: rgba(0, 0, 255, 1)">float</span><span style="color: rgba(0, 0, 0, 1)">: left;
                padding: 0px 10px;
            }
            #navDiv{
                position: absolute;
                bottom: 15px;
                left: ;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">通过js来自动设置导航居中</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
            }
            #navDiv a{
                width: 15px;
                height: 15px;
                background</span>-<span style="color: rgba(0, 0, 0, 1)">color: red;
                margin: </span>0<span style="color: rgba(0, 0, 0, 1)"> 5px;
                </span><span style="color: rgba(0, 0, 255, 1)">float</span><span style="color: rgba(0, 0, 0, 1)">: left;
                opacity: </span>0.5;<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置透明</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
               
            }
            #navDiv a:hover{   </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置鼠标移入效果</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
                background</span>-<span style="color: rgba(0, 0, 0, 1)">color: black;
               
            }
      </span>&lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
      &lt;div id="outer"&gt;
            &lt;ul id="imgList"&gt;
                &lt;li&gt;&lt;img src="img/1.jpg"/&gt;&lt;/li&gt;
                &lt;li&gt;&lt;img src="img/2.jpg"/&gt;&lt;/li&gt;
                &lt;li&gt;&lt;img src="img/3.jpg"/&gt;&lt;/li&gt;
                &lt;li&gt;&lt;img src="img/4.jpg"/&gt;&lt;/li&gt;
                &lt;li&gt;&lt;img src="img/1.jpg"/&gt;&lt;/li&gt;
            &lt;/ul&gt;
            &lt;!--创建图片导航按钮--&gt;
            &lt;div id="navDiv"&gt;
                &lt;a href="javascript:;"&gt;&lt;/a&gt;
                &lt;a href="javascript:;"&gt;&lt;/a&gt;
                &lt;a href="javascript:;"&gt;&lt;/a&gt;
                &lt;a href="javascript:;"&gt;&lt;/a&gt;
            &lt;/div&gt;
      &lt;/div&gt;
    &lt;/body&gt;
    &lt;script type="text/javascript" &gt;
      <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">尝试构造一个可以执行简单动画的函数
         * -参数:
         *   obj:要执行动画的对象
         *   attr:要执行动画的样式,如left top width height
         *   target:执行动画的目标位置
         *   speed:移动的速度(正数右移,负数左移)
         *   callback:回调函数,这个函数会在动画执行完毕以后执行
         </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
      <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> move(obj,attr,target,speed,callback){
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭上一个定时器,防止加速</span>
<span style="color: rgba(0, 0, 0, 1)">            clearInterval(obj.timer);
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取元素目前的位置</span>
            <span style="color: rgba(0, 0, 255, 1)">var</span> current=<span style="color: rgba(0, 0, 0, 1)">parseInt(getStyle(obj,attr));
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断速度的正负</span>
             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果从0到800移动,则speed为正,800到0移动,为负</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span>(current&gt;<span style="color: rgba(0, 0, 0, 1)">target){
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">此时speed为负</span>
                speed=-<span style="color: rgba(0, 0, 0, 1)">speed;
            }
            
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">-开启一个定时器,来执行动画效果</span>
            obj.timer=setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取目标原来的left值</span>
                <span style="color: rgba(0, 0, 255, 1)">var</span> oldValue=<span style="color: rgba(0, 0, 0, 1)">parseInt(getStyle(obj,attr));
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在旧值的基础上增加</span>
                <span style="color: rgba(0, 0, 255, 1)">var</span> newValue=oldValue+<span style="color: rgba(0, 0, 0, 1)">speed;
               
                </span><span style="color: rgba(0, 0, 255, 1)">if</span>((speed&lt;0&amp;&amp;newValue&lt;target)||(speed&gt;0&amp;&amp;newValue&gt;<span style="color: rgba(0, 0, 0, 1)">target)){
                  newValue</span>=<span style="color: rgba(0, 0, 0, 1)">target;
                }
               
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将新值设置给目标</span>
                obj.style=newValue+"px"<span style="color: rgba(0, 0, 0, 1)">;
               
                </span><span style="color: rgba(0, 0, 255, 1)">if</span>(newValue==<span style="color: rgba(0, 0, 0, 1)">target){
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">到达目标值,关闭定时器</span>
<span style="color: rgba(0, 0, 0, 1)">                  clearInterval(obj.timer);
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">动画执行完毕,调用回调函数</span>
                  callback&amp;&amp;<span style="color: rgba(0, 0, 0, 1)">callback();
                }
            },</span>30<span style="color: rgba(0, 0, 0, 1)">);
      }
      
      </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">定义一个元素,来获取指定元素的当前的样式
         * -参数:
         *   obj:要获取样式的元素
         *   name:要获取的样式名
         </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
      <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getStyle(obj,name){
            </span><span style="color: rgba(0, 0, 255, 1)">return</span> getComputedStyle(obj,<span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
      }
    </span>&lt;/script&gt;
   
   
    &lt;script type="text/javascript"&gt;
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1.自动设置#imgList宽度</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> imgList=document.getElementById("imgList"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> imgArr=document.getElementsByTagName("li"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">使宽度随图片自动变化</span>
      imgList.style.width=320*imgArr.length+"px"<span style="color: rgba(0, 0, 0, 1)">;
      
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2.自动设置导航居中</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> navDiv=document.getElementById("navDiv"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> outer=document.getElementById("outer"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置#navDiv随图片自动变化</span>
      navDiv.style.left=(outer.offsetWidth-navDiv.offsetWidth)/2+"px";
      
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">3.默认当前图片下的导航按钮</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> allA=document.getElementsByTagName("a"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> index=0<span style="color: rgba(0, 0, 0, 1)">;
      allA.style.backgroundColor</span>="black"<span style="color: rgba(0, 0, 0, 1)">;
      
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">4.点击第x个超链接显示第x张图片</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span>(i=0;i&lt;allA.length;i++<span style="color: rgba(0, 0, 0, 1)">){
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">为获取点击的是第几个超连击,来添加一个num属性</span>
            allA.num=<span style="color: rgba(0, 0, 0, 1)">i;
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">为a添加单击函数</span>
            allA.onclick=<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置点击动画优先,点击先结束自动动画</span>
<span style="color: rgba(0, 0, 0, 1)">                clearInterval(timer);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">                alert(this);</span>
            <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取点击的a的索引</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">            alert(this.num);</span>
            index=<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.num;
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">切换图片</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">            imgList.style.left=-320*index+"px";</span>
            <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">换成动画效果</span>
            move(imgList,"left",-320*index,20,<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置点击动画优先,再又开始自动动画</span>
<span style="color: rgba(0, 0, 0, 1)">                start();
            });
            setA();
            
            }
      }
      
      
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">5.创建一个方法来设置选中的a</span>
      <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> setA(){
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断</span>
            <span style="color: rgba(0, 0, 255, 1)">if</span>(index&gt;=imgArr.length-1<span style="color: rgba(0, 0, 0, 1)">){
                index</span>=0<span style="color: rgba(0, 0, 0, 1)">;
                imgList.style.left</span>=0<span style="color: rgba(0, 0, 0, 1)">;
            }
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置不点击的变回红色</span>
            <span style="color: rgba(0, 0, 255, 1)">for</span>(i=0;i&lt;allA.length;i++<span style="color: rgba(0, 0, 0, 1)">){
                allA.style.backgroundColor</span>=""<span style="color: rgba(0, 0, 0, 1)">;
            }
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">选中的设置为黑色</span>
                allA.style.backgroundColor="black"<span style="color: rgba(0, 0, 0, 1)">;
      }
      
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6.自动切换图片</span>
<span style="color: rgba(0, 0, 0, 1)">      start();
      </span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> timer;
      </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> start(){
      timer</span>= setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
            index</span>++<span style="color: rgba(0, 0, 0, 1)">;
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断</span>
            index=index % imgArr.length;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">同上面的if判断 0%4=4 1%4=1 ...4%4=0</span>
            <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">轮播</span>
            move(imgList,"left",-320*index,20,<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修改对应导航按钮</span>
<span style="color: rgba(0, 0, 0, 1)">                setA();
            });
            
      },</span>3000<span style="color: rgba(0, 0, 0, 1)">)
      } <br>      //动画轮播图终于完成
    </span>&lt;/script&gt;
&lt;/html&gt;</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/wangdongwei/p/11311861.html
頁: [1]
查看完整版本: JavaScript 轮播图(含过渡动画)