原生js實現(xiàn)無縫輪播圖
本文實例為大家分享了js實現(xiàn)無縫輪播圖的具體代碼,供大家參考,具體內(nèi)容如下
先上效果圖

原理圖

如圖可見,是頁面按順序依次顯示5張圖片,包裹這五張圖片的外層的盒子,我們叫ul,通過向左或右移動不同距離,實現(xiàn)在視圖中顯示的不同的圖片,實現(xiàn)輪播,而同時下面的分頁小球需要根據(jù)當(dāng)前顯示的內(nèi)容進行點亮;
而無縫輪播圖需要在第五張圖片后面再加上第一張圖片,這樣通過右側(cè)箭頭,向右切換,當(dāng)頁面切換到第六張時,也就是最后一張圖片,此時需要將ul的位置設(shè)置為第一張圖的位置,然后從第一張圖片滑動到第二張,形成一個無縫過渡;
同理,樣通過左側(cè)箭頭,向左切換,已經(jīng)顯示到第一張圖片時,再向左切換,ul會設(shè)置為到第五張圖的位置,形成一個無縫過渡
html結(jié)構(gòu)
<div class="wrapper"> <div class="inner"> <ul> <li>頁面1</li> <li>頁面2</li> <li>頁面3</li> <li>頁面4</li> <li>頁面5</li> <li>頁面1</li> </ul> <div class="circle"> <span class="current">1</span> <span>2</span> <span>3</span> <span>4</span> <span>5</span> </div> <div class="direction"> <span class="left"><</span> <span class="right">></span> </div> </div> </div>
js代碼
//獲取頁面元素
var ul = document.getElementsByTagName("ul")[0];
var inner = document.getElementsByClassName("inner")[0];
var circle = document.getElementsByClassName("circle")[0];
var spanArr = circle.children;
var direction =document.getElementsByClassName("direction")[0];
var dirChid=direction.children;
var innerWidth = inner.offsetWidth;
//兩個定時器(一個記錄圖片,一個記錄小圓球)
var dindex = 0;
var span = 0;
//var ulNewLi = ul.children[0].cloneNode(true);
// ul.appendChild(ulNewLi);
for(var i = 0;i<spanArr.length;i++){
//給每個span綁定index,為了和ul中的頁面聯(lián)動
spanArr[i].index = i;
spanArr[i].onmouseover = function () {
//點擊分頁小球,添加current類,current類定義了小球的背景顏色
for (var j = 0; j<spanArr.length ;j++) {
spanArr[j].className = "";
}
this.className = "current";
dindex = span = this.index;
//調(diào)用緩動函數(shù),傳入?yún)?shù):移動元素,目標(biāo)距離
animation(ul,-this.index*innerWidth);
}
}
//為左箭頭綁定事件
//dindex 記錄圖片的索引,span記錄小球的索引,圖片個數(shù)為6,小球的個數(shù)為5
dirChid[0].οnclick=function (event) {
//每次點擊左切換,圖片的索引減一,小球的索引減一
dindex--;
//圖片的索引<0時,設(shè)置ul的位置為第五個圖片的位置
if(dindex<0){
ul.style.left= -innerWidth*spanArr.length+"px";
dindex= spanArr.length-1;
}
animation(ul,-dindex*innerWidth);
//小球的索引減一
span--;
//當(dāng)小球索引小于0時,設(shè)置它的索引為4
if(span<0){
span= spanArr.length-1;
}
//點亮小球
for(var i= 0 ; i<spanArr.length;i++){
spanArr[i].className = "";
}
spanArr[span].className = "current";
}
//為右箭頭綁定事件,
dirChid[1].οnclick=function () {
dindex++;
//圖片的索引大于小球長度個數(shù)時,設(shè)置ul的位置為第1張圖片的位置
if(dindex>spanArr.length){
ul.style.left=0;
dindex=1;
}
animation(ul,-dindex*innerWidth);
span++;
if(span>spanArr.length-1){
span= 0;
}
for(var k= 0 ; k<spanArr.length;k++){
spanArr[k].className = "";
}
spanArr[span].className = "current";
}
//封裝緩動動畫函數(shù)
function animation(ele,target) {
clearInterval(ele.timer);
ele.timer=setInterval(function () {
//獲取起使位置
leader= ele.offsetLeft;
//獲取緩動動畫步長
var step = (target-leader)/10;
//支持不同方向的移動,所以步長有正有負
step = step >0? Math.ceil(step):Math.floor(step);
//當(dāng)前位置= 盒子的位置+步長
leader = leader +step;
ele.style.left = leader+"px";
if(ele.offsetLeft === target) {
clearInterval(ele.timer);
}
},30)
}
精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS實現(xiàn)遠程控制的基本原理和實現(xiàn)方法
遠程控制是指通過網(wǎng)絡(luò)等遠距離通訊手段控制另一設(shè)備的操作行為,在現(xiàn)實生活中,隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,遠程控制技術(shù)越來越重要,本文將詳細介紹?JS?實現(xiàn)遠程控制的基本原理、開發(fā)流程和實現(xiàn)方法,需要的朋友可以參考下2023-06-06
js for循環(huán),為什么一定要加var定義i變量
我知道,有些人(譬如之前的我)寫js的for循環(huán)時,都不習(xí)慣加上var,這當(dāng)然是語法允許的。2010-06-06
js采用map取到id集合組并且實現(xiàn)點擊一行選中一行
本文為大家介紹下如何使用js采用map取到id集合組,并且點擊一行選中一行2013-12-12
echarts設(shè)置暫無數(shù)據(jù)方法實例及遇到的問題
Echarts是百度旗下的一款開源的商業(yè)級數(shù)據(jù)可視化產(chǎn)品,具有豐富的圖表類型,下面這篇文章主要給大家介紹了關(guān)于echarts設(shè)置暫無數(shù)據(jù)方法及遇到的問題的相關(guān)資料,需要的朋友可以參考下2022-12-12
理解JavaScript中的適配器模式Adapter?Pattern
這篇文章主要介紹了理解JavaScript中的適配器模式,適配器模式即Adapter?Pattern,是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,下文更多相關(guān)介紹需要的小伙伴可以參考一下2022-04-04
javascript 實現(xiàn)子父窗體互相傳值的簡單實例
本篇文章主要是對javascript 實現(xiàn)子父窗體互相傳值的簡單實例進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02
JS中產(chǎn)生20位隨機數(shù)以0-9為例也可以是a-z A-Z
本節(jié)主要介紹了JS如何產(chǎn)生隨機數(shù),本例產(chǎn)生20位隨機數(shù)以0-9為例也可以是a-z A-Z,需要的朋友可以參考下2014-08-08

