JavaScript 輪播圖(含過渡動畫)


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                list-style: none;
                margin: 0;
                padding: 0;
            }
            #outer{
                width: 320px;
                height: 300px;
                margin: 50px auto;
                background-color: lightpink;
                padding: 12px 0px ;/*上右下左*/
                overflow: hidden;/*隱藏溢出內容*/
                position: relative;
            }
            #imgList{
                width: ;/*用js來自動設置#imgList寬度*/
                position: absolute; /*子元素相對父元素的絕對定位*/
                left:;/*每移320px 到下一張*/
                
            }
            #imgList li{
                float: left;
                padding: 0px 10px;
            }
            #navDiv{
                position: absolute;
                bottom: 15px;
                left: ;/*通過js來自動設置導航居中*/
            }
            #navDiv a{
                width: 15px;
                height: 15px;
                background-color: red;
                margin: 0 5px;
                float: left;
                opacity: 0.5;/*設置透明*/
                
            }
            #navDiv a:hover{   /*設置鼠標移入效果*/
                background-color: black;
                
            }
        </style>
    </head>
    <body>
        <div id="outer">
            <ul id="imgList">
                <li><img src="img/1.jpg"/></li>
                <li><img src="img/2.jpg"/></li>
                <li><img src="img/3.jpg"/></li>
                <li><img src="img/4.jpg"/></li>
                <li><img src="img/1.jpg"/></li>
            </ul>
            <!--創建圖片導航按鈕-->
            <div id="navDiv">
                <a href="javascript:;"></a>
                <a href="javascript:;"></a>
                <a href="javascript:;"></a>
                <a href="javascript:;"></a>
            </div>
        </div>
    </body>
    <script type="text/javascript" >
        /*嘗試構造一個可以執行簡單動畫的函數
         * -參數:
         *     obj:要執行動畫的對象
         *     attr:要執行動畫的樣式,如left top width height
         *     target:執行動畫的目標位置
         *     speed:移動的速度(正數右移,負數左移)
         *     callback:回調函數,這個函數會在動畫執行完畢以后執行
         */
        function move(obj,attr,target,speed,callback){
            //關閉上一個定時器,防止加速
            clearInterval(obj.timer);
            //獲取元素目前的位置
            var current=parseInt(getStyle(obj,attr));
            //判斷速度的正負
             //如果從0到800移動,則speed為正,800到0移動,為負
            if(current>target){
                //此時speed為負
                speed=-speed;
            }
            
            //-開啟一個定時器,來執行動畫效果
            obj.timer=setInterval(function(){
                //獲取目標原來的left值
                var oldValue=parseInt(getStyle(obj,attr));
                //在舊值的基礎上增加
                var newValue=oldValue+speed;
                
                if((speed<0&&newValue<target)||(speed>0&&newValue>target)){
                    newValue=target;
                }
                
                //將新值設置給目標
                obj.style[attr]=newValue+"px";
                
                if(newValue==target){
                    //到達目標值,關閉定時器
                    clearInterval(obj.timer);
                    //動畫執行完畢,調用回調函數
                    callback&&callback();
                }
            },30);
        }
        
        /*定義一個元素,來獲取指定元素的當前的樣式
         * -參數:
         *     obj:要獲取樣式的元素
         *     name:要獲取的樣式名
         */
        function getStyle(obj,name){
            return getComputedStyle(obj,null)[name];
        }
    </script>
    
    
    <script type="text/javascript">
        //1.自動設置#imgList寬度
        var imgList=document.getElementById("imgList");
        var imgArr=document.getElementsByTagName("li");
        //使寬度隨圖片自動變化
        imgList.style.width=320*imgArr.length+"px";
        
        //2.自動設置導航居中
        var navDiv=document.getElementById("navDiv");
        var outer=document.getElementById("outer");
        //設置#navDiv隨圖片自動變化
        navDiv.style.left=(outer.offsetWidth-navDiv.offsetWidth)/2+"px";
        
        //3.默認當前圖片下的導航按鈕
        var allA=document.getElementsByTagName("a");
        var index=0;
        allA[index].style.backgroundColor="black";
        
        //4.點擊第x個超鏈接顯示第x張圖片
        for(i=0;i<allA.length;i++){
            //為獲取點擊的是第幾個超連擊,來添加一個num屬性
            allA[i].num=i;
            //為a添加單擊函數
            allA[i].onclick=function(){
                //設置點擊動畫優先,點擊先結束自動動畫
                clearInterval(timer);
//                alert(this);
            //獲取點擊的a的索引
//            alert(this.num);
            index=this.num;
            //切換圖片
//            imgList.style.left=-320*index+"px";
            //換成動畫效果
            move(imgList,"left",-320*index,20,function(){
                //設置點擊動畫優先,再又開始自動動畫
                start();
            });
            setA();
            
            }
        }
        
        
        //5.創建一個方法來設置選中的a
        function setA(){
            //判斷
            if(index>=imgArr.length-1){
                index=0;
                imgList.style.left=0;
            }
            //設置不點擊的變回紅色
            for(i=0;i<allA.length;i++){
                allA[i].style.backgroundColor="";
            }
            //選中的設置為黑色
                allA[index].style.backgroundColor="black";
        }
        
        //6.自動切換圖片
        start();
        var timer;
        function start(){
        timer= setInterval(function(){
            index++;
            //判斷
            index=index % imgArr.length;//同上面的if判斷 0%4=4 1%4=1 ...4%4=0
            //輪播
            move(imgList,"left",-320*index,20,function(){
                //修改對應導航按鈕
                setA();
            });
            
        },3000)
        } 
      //動畫輪播圖終於完成
</script> </html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM