圖解js圖片輪播效果
本文實(shí)例講解了js圖片輪播效果的實(shí)現(xiàn)原理,分享給大家供大家參考,具體內(nèi)容如下
兩種圖片輪播實(shí)現(xiàn)方案,先來(lái)看效果對(duì)比:
方案一:
原理:將圖片擺成一行,從左到右依次滾動(dòng)進(jìn)入視野,當(dāng)滾動(dòng)到最后一張時(shí),從右到左滾動(dòng)回到第一張。這么做的缺點(diǎn)是,滾動(dòng)到最后一張時(shí),會(huì)有一個(gè)反向,導(dǎo)致整個(gè)滾動(dòng)過(guò)程不連貫。
方案二:
實(shí)現(xiàn)原理示意圖
原理:
1.輪播過(guò)程中,有幾個(gè)關(guān)鍵元素:一個(gè)舞臺(tái)(綠框)、候場(chǎng)區(qū)(黑框)、排隊(duì)區(qū)(紅框)和兩個(gè)數(shù)組A和B。A用來(lái)保存正在展示和下一個(gè)將要展示的圖片,如:圖片1、2;B用來(lái)保存排隊(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>
精彩專(zhuān)題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是js圖片輪播效果的實(shí)現(xiàn)原理以及詳細(xì)代碼,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
prototype.js簡(jiǎn)單實(shí)現(xiàn)ajax功能示例
這篇文章主要介紹了prototype.js簡(jiǎn)單實(shí)現(xiàn)ajax功能,結(jié)合實(shí)例形式分析了prototype.js前臺(tái)實(shí)現(xiàn)ajax與后臺(tái)struts的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10javascript避免數(shù)字計(jì)算精度誤差的方法詳解
本篇文章主要是對(duì)javascript避免數(shù)字計(jì)算精度誤差的方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03js動(dòng)態(tài)設(shè)置鼠標(biāo)事件示例代碼
動(dòng)態(tài)設(shè)置鼠標(biāo)事件的方法有很多,接下來(lái)為大家介紹下js中是如何做到的,感興趣的朋友不要錯(cuò)過(guò)2013-10-10es6函數(shù)name屬性功能與用法實(shí)例分析
這篇文章主要介紹了es6函數(shù)name屬性,結(jié)合實(shí)例形式分析了es6函數(shù)name屬性基本原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04jquery方法+js一般方法+js面向?qū)ο蠓椒▽?shí)現(xiàn)拖拽效果
多種方法制作的div拖拽,簡(jiǎn)單實(shí)用,包括了jquery方法、js一般方法、js面向?qū)ο蠓椒?/div> 2012-08-08移動(dòng)端基礎(chǔ)事件總結(jié)與應(yīng)用
本文主要介紹了移動(dòng)端基礎(chǔ)事件總結(jié)與應(yīng)用,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01最新評(píng)論