詳解JavaScript實(shí)現(xiàn)動(dòng)態(tài)的輪播圖效果
利用javascript能實(shí)現(xiàn)常見的動(dòng)態(tài)的網(wǎng)頁(yè)輪播圖效果,如下圖1所示:
圖1
實(shí)現(xiàn)該輪播圖有以下幾個(gè)要點(diǎn):
(1)在左右兩側(cè)各有一個(gè)箭頭,分別指的是向左和向右切換,即點(diǎn)擊相應(yīng)的位置就會(huì)切換到該圖片之前(或之后)的一張圖片
(2)在圖片的下方有一排圓形按鈕,每個(gè)按鈕有各自的單擊事件,點(diǎn)擊任意一個(gè)按鈕就切換到對(duì)應(yīng)的圖片
(3)不點(diǎn)擊圖片時(shí),圖片會(huì)自動(dòng)播放,即有一個(gè)圖片輪播效果
首先可以寫出大概的HTML代碼為代碼1:
代碼1:
<div id="container"> <div id="list" style="left: -600px;"> //設(shè)置圖像的父級(jí)元素定位為向左600px,即是左移一個(gè)圖片的寬度 <img src="images/16.jpg" alt="1"> //設(shè)置的是5張圖片自動(dòng)輪播,此處會(huì)有7張圖片,并且紅色代碼表示的圖片和 <img src="images/12.jpg" alt="1"> 藍(lán)色代碼表示的圖片是相同的。這是因?yàn)槊繌垐D片都有向前和向后兩種單擊 <img src="images/13.jpg" alt="2"> 事件,要使第一張圖片向前單擊顯示第五張圖片,就需要在其前方添加第五 <img src="images/14.jpg" alt="3"> 張圖片,避免在第一張圖片單擊向左時(shí)顯示空白;同理,在第五張圖片之 <img src="images/15.jpg" alt="4"> 后也要添加第一張圖片,使其實(shí)現(xiàn)平穩(wěn)過渡 <img src="images/16.jpg" alt="5"> <img src="images/12.jpg" alt="5"> </div> <div id="buttons"> //設(shè)置相對(duì)應(yīng)的按鈕,并未按鈕添加對(duì)應(yīng)的自定義屬性 index <span index="1" class="on"></span> <span index="2"></span> <span index="3"></span> <span index="4"></span> <span index="5"></span> </div> <a href="#" rel="external nofollow" rel="external nofollow" id="prev" class="arrow"><</a> //此處的a表示的是箭頭;<(左箭頭),>(右箭頭) <a href="#" rel="external nofollow" rel="external nofollow" id="next" class="arrow">></a> </div>
在上例中,圖片的寬是600px,高是400px;
然后再設(shè)置其CSS樣式為代碼2:
代碼2:
*{margin: 0;padding: 0;text-decoration: none;} //設(shè)置所有元素的基本樣式 body{padding: 20px;} #container{ position: relative; //設(shè)置最外層的div元素的定位為相對(duì)定位,即是相對(duì)與未設(shè)置定位之前的位置進(jìn)行定位 width: 600px; height: 400px; border: 3px solid #333; overflow: hidden; //設(shè)置容器的寬高,并將溢出部分設(shè)置為隱藏 } #list{ position: absolute; //設(shè)置圖片所在的父級(jí)div的定位為絕對(duì)定位,即是相對(duì)于已定位的父級(jí)元素進(jìn)行定位 z-index: 1; //設(shè)置該div的顯示層次 width: 4200px; //該div是所有圖片的父級(jí)元素,因此其寬高的設(shè)置應(yīng)該包含所有的圖片 height: 400px; } #list img{ float: left; //設(shè)置圖片的顯示的顯示方式,為向左浮動(dòng) width: 600px; height: 400px; } #buttons{ position: absolute; //設(shè)置屏幕下方的所有圓點(diǎn)的定位方式,相對(duì)于容器元素進(jìn)行絕對(duì)定位 left: 250px; //距離父級(jí)已進(jìn)行定位的元素的左側(cè)距離為250px bottom: 20px; z-index: 2; //設(shè)置圓點(diǎn)的顯示層級(jí)為2,即是在圖片div的上方 height: 10px; width: 100px; } #buttons span{ float: left; margin-right: 5px; width: 10px; height: 10px; border: 1px solid #fff; border-radius: 50%; //半徑為50%,即是設(shè)置為圓點(diǎn)顯示 background: #333; cursor: pointer; } #buttons .on{ background: orangered; } .arrow{ position: absolute; //設(shè)置按鈕的定位方式,即是相對(duì)與容器元素進(jìn)行絕對(duì)定位 top: 180px; z-index: 2; display: none; width: 40px; height: 40px; font-size: 36px; font-weight: bold; line-height: 39px; text-align: center; color: #fff; background-color: rgba(0,0,0,.3); cursor: pointer; } .arrow:hover{ background-color: rgba(0,0,0,.7); } #container:hover .arrow{ display: block; } #prev{ left: 20px; } #next{ right: 20px; }*/
設(shè)置完基本的樣式之后,其顯示效果如圖2所示:
圖2
此時(shí)需要給特定的元素添加事件,如下列的代碼3所示:
代碼3:
window.onload=function(){ var list=document.getElementById('list'); //獲取圖片元素的父級(jí)元素,并命名為list var prev=document.getElementById('prev'); //獲取左箭頭 var next=document.getElementById('next'); //獲取右箭頭 function animate(offset){ //設(shè)置一個(gè)名為animate的函數(shù),該函數(shù)接收一個(gè)參數(shù) var newleft=parseInt(list.style.left)+offset; //獲取圖片的父級(jí)元素的左側(cè)的定位值,并加上傳入的參數(shù)offset if(newleft<-3000){ //圖片的父級(jí)div在移動(dòng)的過程中,顯示的圖片的定位都是負(fù)值,如圖3所示 list.style.left= -600+'px'; //但圖片顯示到五張圖片上的最后一張時(shí),自動(dòng)跳轉(zhuǎn)到第一張圖片 }else if(newleft>-600){ //當(dāng)在第一張圖片上單擊向左的按鈕時(shí),自動(dòng)跳轉(zhuǎn)到最后一張 list.style.left= -3000+'px'; }else{ list.style.left=newleft+'px'; } }
函數(shù)animate()中獲取的是style.left,是相對(duì)左邊獲取距離,所以第一張圖后style.left都為負(fù)值,如圖3所示:
圖3
結(jié)合上述的代碼3,我們可設(shè)置向左和向右的按鈕的單擊事件,如代碼4所示:
代碼4:
prev.onclick=function(){ //向左的單擊事件 animate(600); } next.onclick=function(){ //向右的單擊事件 animate(-600) } var timer; function play(){ timer=setInterval(function(){ //設(shè)置間歇調(diào)用,時(shí)間間隔為1500毫秒 next.onclick() //此處是自動(dòng)向右切換,如果想設(shè)置為向左切換,把next換為prev即可 },1500) } play(); //實(shí)現(xiàn)自動(dòng)調(diào)用 var container=document.getElementById('container'); //獲取最外層的容器元素 function stop(){ clearInterval(timer); } container.onmouseover=stop; //當(dāng)鼠標(biāo)移動(dòng)到上方時(shí),清除定時(shí)器 container.onmouseout=play; //當(dāng)鼠標(biāo)從容器元素上方移走時(shí),進(jìn)行自動(dòng)輪播 var buttons=document.getElementById('buttons').getElementsByTagName('span'); var index=1; function buttonsShow(){ for(var i=0;i<buttons.length;i++){ if(buttons[i].className=='on'){ //如果某個(gè)span設(shè)置了class='on',那么就將其的class屬性設(shè)置為空 buttons[i].className=''; } } //數(shù)組從0開始,故index需要-1 buttons[index-1].className='on'; //設(shè)置下一個(gè)span的class屬性值為'on',即是高亮顯示 } prev.onclick=function(){ index-=1; if(index<1){ index=5; } buttonsShow(); animate(600); } next.onclick=function(){ //由于上面定時(shí)器的作用,index會(huì)一直遞增下去,而元圓點(diǎn)只有5個(gè),因此需要先做出判斷 index+=1; if(index>5){ index=1; } buttonsShow(); animate(-600); } //點(diǎn)擊任意一個(gè)小圓點(diǎn)就切換到所對(duì)應(yīng)的圖片 for(var i=0;i<buttons.length;i++){ (function(i){ //使用立即執(zhí)行函數(shù) buttons[i].onclick=function(){ var clickIndex=parseInt(this.getAttribute('index')); var offset=600*(index-clickIndex); animate(offset); //存放鼠標(biāo)點(diǎn)擊之后的位置,用于小圓點(diǎn)的正常顯示 index=clickIndex; buttonsShow(); } })(i) } }
以上所述是小編給大家介紹的JavaScript實(shí)現(xiàn)動(dòng)態(tài)的輪播圖效果詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
javascript操作Cookie(設(shè)置、讀取、刪除)方法詳解
這篇文章主要詳細(xì)向大家介紹了javascript操作Cookie的方法,包括設(shè)置、讀取、刪除操作,十分的細(xì)致全面,附上示例,是篇非常不錯(cuò)的文章,這里推薦給大家。2015-03-03JS中Generator函數(shù)與async函數(shù)用法介紹
javascript中經(jīng)常會(huì)用到異步編程,在ES6之后我們使用的?Generator函數(shù)、async函數(shù)、promise都是我們異步編程的一大助力,這里我們主要講解Generator、async函數(shù),并且簡(jiǎn)介他們之間的一些聯(lián)系,本篇文章會(huì)帶著一些簡(jiǎn)易案例,方便大家理解使用2023-06-06webpack組織模塊打包Library的原理及實(shí)現(xiàn)
這篇文章主要介紹了webpack組織模塊打包Library的原理及實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-03-03javascript判斷ie瀏覽器6/7版本加載不同樣式表的實(shí)現(xiàn)代碼
ie6/ie7的兼容問題很讓人苦惱,我們可以針對(duì)這兩個(gè)版本的瀏覽器單獨(dú)寫?yīng)毩⒌臉邮奖恚瑏?lái)解決兼容問題。這里的例子以判斷ie6與ie7來(lái)加載不同的樣式表2011-12-12Bootstrap源碼解讀媒體對(duì)象、列表組和面板(10)
這篇文章主要源碼解讀了Bootstrap媒體對(duì)象、列表組和面板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12javascript簡(jiǎn)單實(shí)現(xiàn)跟隨滾動(dòng)條漂浮的返回頂部按鈕效果
這篇文章主要介紹了javascript簡(jiǎn)單實(shí)現(xiàn)跟隨滾動(dòng)條漂浮的返回頂部按鈕效果,涉及javascript基于onscroll事件動(dòng)態(tài)改變頁(yè)面元素樣式的相關(guān)技巧,需要的朋友可以參考下2016-08-08JavaScript結(jié)合Bootstrap仿微信后臺(tái)多圖文界面管理
這篇文章主要為大家詳細(xì)介紹了js結(jié)合Bootstrap仿微信后臺(tái)多圖文界面管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07