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

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

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

原理:
1.輪播過程中,有幾個(gè)關(guān)鍵元素:一個(gè)舞臺(綠框)、候場區(qū)(黑框)、排隊(duì)區(qū)(紅框)和兩個(gè)數(shù)組A和B。A用來保存正在展示和下一個(gè)將要展示的圖片,如:圖片1、2;B用來保存排隊(duì)等候出場的圖片,如圖片5、4、3。
2.每一步輪播時(shí),要做的事情如下:
A要做的事情是把它的第一個(gè)元素向左移走,把第二個(gè)元素向左移進(jìn)展示區(qū)域;然后把剛才的第一個(gè)元素從A中shift出去,并splice進(jìn)B的第一個(gè)位置上。
B要做的事情是把它的最后一個(gè)元素,移到候場區(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ì)代碼,希望對大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
prototype.js簡單實(shí)現(xiàn)ajax功能示例
這篇文章主要介紹了prototype.js簡單實(shí)現(xiàn)ajax功能,結(jié)合實(shí)例形式分析了prototype.js前臺實(shí)現(xiàn)ajax與后臺struts的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
javascript避免數(shù)字計(jì)算精度誤差的方法詳解
本篇文章主要是對javascript避免數(shù)字計(jì)算精度誤差的方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-03-03
js動態(tài)設(shè)置鼠標(biāo)事件示例代碼
動態(tài)設(shè)置鼠標(biāo)事件的方法有很多,接下來為大家介紹下js中是如何做到的,感興趣的朋友不要錯(cuò)過2013-10-10
es6函數(shù)name屬性功能與用法實(shí)例分析
這篇文章主要介紹了es6函數(shù)name屬性,結(jié)合實(shí)例形式分析了es6函數(shù)name屬性基本原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
jquery方法+js一般方法+js面向?qū)ο蠓椒▽?shí)現(xiàn)拖拽效果
多種方法制作的div拖拽,簡單實(shí)用,包括了jquery方法、js一般方法、js面向?qū)ο蠓椒?/div> 2012-08-08最新評論

