<!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>