1. 程式人生 > >JS原生程式碼實現圖片輪播無縫切換的一種思路

JS原生程式碼實現圖片輪播無縫切換的一種思路

JS實現圖片輪播是個老生常談的問題,也是新手的必由之路,在這裡提供一種思路,供大家參考:

1.生成DIV做外框,並設定overflow:hidden;  // 每個方法都必須有的

2.建立一個數組arr,放置圖片地址

3.生成兩個並排的圖片img1,img2,初始化圖片地址為arr[0] arr[1] 並使用絕對定位,便於後面移動圖片

4.開一個定時器,間隔一定時間後,img1 img2的left值同時向左移動圖片寬度值的畫素   //移動的時候可以再開個定時器,做滑動的效果

5.當img1的left值為負圖片寬度時,賦予img1的left值為正圖片寬度,並且將陣列的第3張圖片地址賦予img1,繼續向左移動

6.當img2的left值為負圖片寬度時,賦予img2的left值為正圖片寬度,並將陣列的第4張圖片地址賦予img2,繼續向左移動

7.當兩張圖片的圖片地址到了陣列的最後時,迴圈到第一個圖片地址。

這個方法的難點在於:

1.兩張圖片的地址在陣列中是逢2累加的

2.當圖片的地址到了陣列的最後時,需要折回陣列的首位

具體程式碼為:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>圖片自動切換</title>
</head>
<style>
body{margin:100px;}
p,img,div,ul,li { margin:0;padding:0;}
#content { width:600px; height:400px; border:1px solid #F00; position:relative;overflow:hidden;}
#img1 { position:absolute;top:0;left:0;}
#img2 { position:absolute;top:0;left:600px;}
#intro {width:600px; height:60px; position:absolute; top:340px; left:0;}
p { width:600px; height:60px; background:#333; opacity:0.5; position:absolute;}
span {display:block; width:600px; height:60px; line-height:60px; text-align:center; color:#fff; position:absolute; z-index:2;}
</style>
<script>
/*
兩個圖片位置變換,同時把數組裡的圖片地址賦予圖片
*/


window.onload = function(){
var intro = document.getElementById('intro');
var oSpan = intro.getElementsByTagName('span')[0];
var oP = intro.getElementsByTagName('p')[0];
var img1 = document.getElementById('img1');//圖片1
var img2 = document.getElementById('img2');//圖片2
var oUl = document.getElementsByTagName('ul')[0];
var arr = ['img/01.jpg','img/02.jpg','img/03.jpg','img/04.jpg','img/05.jpg']; //圖片地址
var timer1 = null;
var timer2 = null;
var timer3 = null;
//初始化
var n = 0;
var a = 0;
var b = 1;
intro.style['top'] = '400px';
oSpan.innerHTML = '圖片說明'+(n+1);
img1.src = arr[a];
img2.src = arr[b];

timer1 = setInterval(changeImg,3000);
timer3 = setInterval(autoText,30);
function changeImg(){
clearInterval(timer2);
clearInterval(timer3);
intro.style['top'] = '400px';
timer2 = setInterval(autoPic,30);
timer3 = setInterval(autoText,30);
n++;
n%=arr.length;
oSpan.innerHTML = '圖片說明'+(n+1);
};

function autoPic(){
var length1 = parseInt(getStyle(img1,'left'))-10;
var length2 = parseInt(getStyle(img2,'left'))-10;
img1.style['left'] = length1+'px';
img2.style['left'] = length2+'px';

if(length1==-600){
a+=2;
if(a>=arr.length)a-=arr.length;
img1.style['left'] = '600px';
img1.src = arr[a];
clearInterval(timer2); 
}
if(length2== -600){
b+=2;
if(b>=arr.length)b-=arr.length;
img2.style['left'] = '600px';
img2.src = arr[b];
clearInterval(timer2);
} 
}; 
function autoText(){
var height = parseInt(getStyle(intro,'top'))-2;
intro.style['top'] = height +'px';
if(height<=340)clearInterval(timer3);
};
function getStyle(obj,str){return obj.currentStyle?obj.currentStyle[str]:getComputedStyle(obj)[str];};
};
</script>
 
<body>
<div id="content">
<img id="img1" />
<img id="img2" />
<div id="intro">
<span></span>
<p></p> 
</div>
</div>
</body>
</html>


此程式碼僅實現功能,其中函式還可以繼續優化,本文不再贅述。

轉載請標明作者,謝謝。