JavaScript實(shí)現(xiàn)圖片輪播特效
今天給大家介紹下怎么用 JS 實(shí)現(xiàn)圖片輪播效果。
原理描述:
使用JS實(shí)現(xiàn)輪播的原理是這樣的:
假設(shè)初始的情況,下圖一個(gè)網(wǎng)格代表一個(gè)圖,初始時(shí),顯示1 :

當(dāng)進(jìn)行一次輪播后,顯示變?yōu)橄聢D 顯示2:

依次類推。
代碼實(shí)現(xiàn):
1 JS 代碼:
<script type="text/javascript">
window.οnlοad=function(){
//獲得ul的元素
var imgList=document.getElementById("imgList");
//獲得圖片的數(shù)組
var imgArr=document.getElementsByTagName("img");
var navId=document.getElementById("navId");
var outer=document.getElementById("outer");
imgList.style.width=520*imgArr.length+"px";
//設(shè)置navId的位置 使其居中
navId.style.left=(outer.offsetWidth-navId.offsetWidth)/2+"px";
//得到所有的a 標(biāo)簽 如果有其他的A的話 這里需要注意要使用navId子元素的a
var allA=document.getElementsByTagName("a");
var index=0;
allA[index].style.backgroundColor='black';//設(shè)置默認(rèn)的a為黑色
for(var i=0;i<allA.length;i++){
allA[i].num=i;
//alert(allA[i].num);
allA[i].οnclick=function(){
clearInterval(timer);
index=this.num;
/* imgList.style.left= -520*index+"px"; */
setA();
move(imgList,"left",-520*index,50,function(){
autoChange();
});
};
}
function setA(){
//alert(index);
//當(dāng)indcx值比圖片的數(shù)目多的時(shí)候 就歸0
if(index>=imgArr.length-1){
index=0;
imgList.style.left=0;
}
for(var i=0;i<allA.length;i++){
//去掉未點(diǎn)擊的顏色 仍然保留a : hover有用
allA[i].style.backgroundColor="";
}
allA[index].style.backgroundColor="black";
}
var timer;
function autoChange(){
timer=setInterval(function(){
index++;
index%=imgArr.length;
move(imgList,"left",-520*index,20,function(){
setA();
});
},2000);
}
autoChange();
//可以根據(jù) target 參數(shù)進(jìn)行判斷 向哪個(gè)方向移動(dòng)
function move(obj,attr,target,speed,callback){
var current=parseInt(getStyle(obj,attr));
//alert(current);
//根據(jù)目標(biāo)的位置來(lái)判定 speed的值是正是負(fù)
if(current>target){
speed=-speed;
}
//自定義對(duì)象定時(shí)器 防止對(duì)象之間的混亂操作
clearInterval(obj.timer);
//alert(oldValue);
obj.timer=setInterval(function(){
var oldValue=parseInt(getStyle(obj,attr));
var newVal=oldValue+speed;
//如果移動(dòng)的越界 進(jìn)行重置
if((speed<0 && newVal<=target) || (speed>0 && newVal>=target)){
newVal=target;
}
obj.style[attr]=newVal+"px";
if(newVal==target){
clearInterval(obj.timer);
callback && callback();//回掉函數(shù) 先判斷 有就執(zhí)行 沒(méi)有不執(zhí)行
}
},30);
}
//obj:獲取樣式元素
//name:獲取樣式名
function getStyle(obj,name){
if(window.getComputedStyle){
return getComputedStyle(obj,null)[name];
}else{
return obj.currentStyle[name];
}
}
}
</script>
2 HTML 代碼:
<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/1.jpg"></li><!-- 增加這個(gè)為了實(shí)現(xiàn)輪播無(wú)縫切換 --> </ul> <div id="navId"> <a href="javascript:0" ></a> <a href="javascript:0" ></a> <a href="javascript:0" ></a> </div> </div>
3 CSS代碼:
<style type="text/css">
*{
margin:0px;
padding:0px;
}
#outer{
width:520px;
height:500px;
margin:50px auto;
background-color:greenyellow;
padding:10px 0;
/* 開啟相對(duì)定位*/
position:relative;
overflow:hidden;/* 將超出的部分隱藏 */
/* border:3px solid greenyellow */
}
#imgList{
/*去除li的點(diǎn)*/
list-style:none;
/*開啟絕對(duì)定位 */
position:absolute;
/*設(shè)置ul的寬度*/
/* width:1560px; */
}
#imgList li{
/*為圖片設(shè)置浮動(dòng)*/
float:left;
margin:0 10px;/*設(shè)置左右外邊距*/
}
#navId{
/* 開啟絕對(duì)定位 */
position:absolute;
/*設(shè)置位置*/
bottom:15px;
/*設(shè)置該塊的左偏移量,使其可以居中
由于outer 寬 520 每個(gè)鏈接寬15+2*5=25 目前共三張圖,則共寬75*/
/* left:212px; */
}
#navId a{
width:15px;
height:15px;
float:left;/* 設(shè)置超鏈接浮動(dòng) */
margin:0 5px;
background-color:red;
opacity:0.5;
/*兼容 IE8 設(shè)置透明度*/
filter:alpha(opacity=50);
}
/*設(shè)置鼠標(biāo)移入效果*/
#navId a:hover{
background-color:black;
}
</style>
4 實(shí)現(xiàn)效果:

更多關(guān)于輪播圖效果的專題,請(qǐng)點(diǎn)擊下方鏈接查看學(xué)習(xí)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
HTML+CSS+JS實(shí)現(xiàn)的簡(jiǎn)單應(yīng)用小案例分享
這篇文章主要為大家分享四個(gè)用HTML+CSS+JS實(shí)現(xiàn)的簡(jiǎn)單應(yīng)用小案例,有:猜數(shù)字、表白墻、切換日夜間模式和待辦事項(xiàng),需要的可以參考一下2022-02-02
JS實(shí)現(xiàn)slide文字框縮放伸展效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)slide文字框縮放伸展效果代碼,涉及JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
javaScript中push函數(shù)用法實(shí)例分析
這篇文章主要介紹了javaScript中push函數(shù)用法,較為詳細(xì)的分析了javascript中push函數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-06-06
javascript消除window.close()的提示窗口
有人問(wèn)起,怎么去掉js調(diào)用window.close()時(shí)怎么去掉那可惡的提示,咋一看好像還真不好弄,IE的安全機(jī)制好像就不允許通過(guò)腳本關(guān)閉本頁(yè)面,但是IE好像可以允許js關(guān)閉彈出窗口,那我們是不是可以通過(guò)一定的技巧欺騙一下IE,繞過(guò)去呢。鼓搗了幾下,似乎還真可以做到2015-05-05
探討JavaScript語(yǔ)句的執(zhí)行過(guò)程
本文給大家介紹JavaScript語(yǔ)句的執(zhí)行過(guò)程的相關(guān)知識(shí),對(duì)js語(yǔ)句執(zhí)行過(guò)程的相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01
基于JavaScript實(shí)現(xiàn)的插入排序算法分析
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)的插入排序算法,結(jié)合實(shí)例形式詳細(xì)分析了插入排序的原理、操作步驟及javascript相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-04-04
JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)生成表格
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)生成表格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

