圖解js圖片輪播效果
本文實(shí)例講解了js圖片輪播效果的實(shí)現(xiàn)原理,分享給大家供大家參考,具體內(nèi)容如下
兩種圖片輪播實(shí)現(xiàn)方案,先來看效果對(duì)比:
方案一:

原理:將圖片擺成一行,從左到右依次滾動(dòng)進(jìn)入視野,當(dāng)滾動(dòng)到最后一張時(shí),從右到左滾動(dòng)回到第一張。這么做的缺點(diǎn)是,滾動(dòng)到最后一張時(shí),會(huì)有一個(gè)反向,導(dǎo)致整個(gè)滾動(dòng)過程不連貫。
方案二:

實(shí)現(xiàn)原理示意圖

原理:
1.輪播過程中,有幾個(gè)關(guān)鍵元素:一個(gè)舞臺(tái)(綠框)、候場(chǎng)區(qū)(黑框)、排隊(duì)區(qū)(紅框)和兩個(gè)數(shù)組A和B。A用來保存正在展示和下一個(gè)將要展示的圖片,如:圖片1、2;B用來保存排隊(duì)等候出場(chǎng)的圖片,如圖片5、4、3。
2.每一步輪播時(shí),要做的事情如下:
A要做的事情是把它的第一個(gè)元素向左移走,把第二個(gè)元素向左移進(jìn)展示區(qū)域;然后把剛才的第一個(gè)元素從A中shift出去,并splice進(jìn)B的第一個(gè)位置上。
B要做的事情是把它的最后一個(gè)元素,移到候場(chǎng)區(qū)(即目前圖2所在的位置)等候;然后把剛才的最后一個(gè)元素從B中pop出去,并push到A中。
Code:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>圖片輪播-v2</title>
<style>
ul{
margin: 0;
padding: 0;
list-style: none;
}
.sliderWrap{
width: 200px;
height: 112px;
overflow: hidden;
margin: 0 auto;
}
.sliderWrap ul{
position: relative;
width: 1000px;
transition: left .5s ease;
left: 0;
}
.sliderWrap li{
position: relative;
float: left;
}
.sliderWrap ul li img{
width: 100%;
}
</style>
</head>
<body>
<div class="sliderWrap">
<ul id="slider">
<li><img src="images/slider/slider1.jpg" alt=""></li>
<li><img src="images/slider/slider2.jpg" alt=""></li>
<li><img src="images/slider/slider3.jpg" alt=""></li>
<li><img src="images/slider/slider4.jpg" alt=""></li>
</ul>
</div>
<input type="button" value="click me" id="next"/>
<script>
/**
* 圖片輪播
* @type {Element}
*/
var btn = document.getElementById("next");
var dom = document.getElementById("slider");
var liArr = dom.getElementsByTagName("li");
var curWidth = 200;
var ulWidth = curWidth * liArr.length;
var show = [];
var circle = [];
var goAway = "translate(-" + curWidth +"px, 0) translateZ(0px)";
var goIn = "translate(0, 0) translateZ(0px)";
var goPre = "translate(" + curWidth +"px, 0) translateZ(0px)";
//保證所有l(wèi)i在ul中能在一行內(nèi)放下
dom.style.width = ulWidth + "px";
for(var i = 0, len = liArr.length; i < len; i++){
var curLi = liArr[i];
curLi.setAttribute("data-index", i);
curLi.style.width = curWidth + "px";
if(i == 0){
curLi.style.left = 0;
show.push(curLi);
}else{
curLi.style.left = - curWidth * i + "px";
if(i > 1){
translate(curLi, goAway, '')
circle.push(curLi);
}else{
show.push(curLi);
translate(curLi, goPre, '');
}
}
}
circle.reverse();
btn.onclick = function(){
//已展示的圖片滾粗
var showFirst = show.shift();
translate(showFirst, goAway, "300ms");
//正在展示的圖片
translate(show[0], goIn, "300ms");
circle.splice(0, 0, showFirst);
//準(zhǔn)備好下一個(gè)將要展示的圖片
var nextPre = circle.pop();
translate(nextPre, goPre, "0ms");
show.push(nextPre);
};
function translate(dom, goType, time){
dom.style.transform =
dom.style.webkitTransform =
dom.style.mozTransform =
dom.style.msTransform =
dom.style.oTransform = goType;
dom.style.transitionDuration =
dom.style.webkitTransitionDuration =
dom.style.mozTransitionDuration =
dom.style.msTransitionDuration =
dom.oTransitionDuration = time;
}
</script>
</body>
</html>
精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是js圖片輪播效果的實(shí)現(xiàn)原理以及詳細(xì)代碼,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
event.X和event.clientX的區(qū)別分析
解釋一下event.X和event.clientX有什么區(qū)別?event.clientX返回事件發(fā)生時(shí),mouse相對(duì)于客戶窗口的X坐標(biāo) event.X也一樣但是如果設(shè)置事件對(duì)象的定位屬性值為relative2011-10-10
JS設(shè)計(jì)模式之責(zé)任鏈模式應(yīng)用詳解
JS責(zé)任鏈模式是一種行為型設(shè)計(jì)模式,它允許多個(gè)對(duì)象按照順序處理請(qǐng)求,直到其中一個(gè)對(duì)象能夠處理請(qǐng)求為止,這樣的對(duì)象鏈被稱為責(zé)任鏈,本文將給大家詳細(xì)講講責(zé)任鏈模式在JS中的應(yīng)用,需要的朋友可以參考下2023-08-08
JS控制靜態(tài)頁面?zhèn)鬟f參數(shù)并獲取參數(shù)應(yīng)用
這篇文章主要介紹了JS控制靜態(tài)頁面?zhèn)鬟f參數(shù)并獲取參數(shù)應(yīng)用的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
詳解微信圖片防盜鏈“此圖片來自微信公眾平臺(tái) 未經(jīng)允許不得引用”的解決方案
這篇文章主要介紹了詳解微信圖片防盜鏈“此圖片來自微信公眾平臺(tái) 未經(jīng)允許不得引用”的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
超越Jquery_01_isPlainObject分析與重構(gòu)
isPlainObject是Jquery1.4后提供的新方法,用于判斷對(duì)象是否是純粹的對(duì)象(通過 {} 或者 new Object 創(chuàng)建的)。2010-10-10
javascript獲取隱藏dom的寬高 具體實(shí)現(xiàn)
一個(gè)隱藏的DOM是獲取不到寬高的,如果想要獲取,采用下面的方法:2013-07-07
排序算法的javascript實(shí)現(xiàn)與講解(99js手記)
這篇文章主要介紹了排序算法的javascript實(shí)現(xiàn)與講解,需要的朋友可以參考下2014-09-09
微信小程序獲取驗(yàn)證碼60秒倒計(jì)時(shí)功能
這篇文章主要介紹了微信小程序獲取驗(yàn)證碼60秒倒計(jì)時(shí)模板,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04

