原生js實(shí)現(xiàn)網(wǎng)易輪播圖效果
一、實(shí)現(xiàn)效果圖
二、分析布局
主盒子里分上下兩個小盒子(1和2)。
包含圖片的盒子占兩張圖片的寬(3),處于上盒子中,當(dāng)前圖片在上盒子(1)中,其它圖片在盒子(3)的右側(cè)等待播放。
下邊的盒子(2)包括了六個小方塊及定位在主盒子上的兩個箭頭。
三、html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>wangyi</title> <link type="text/css" rel="stylesheet" href="css/guide.css"/> <script type="text/javascript" src="../animate.js"></script> <script type="text/javascript" src="js/main.js"></script> </head> <body> <div class="w-slider"> <div class="slider"> <div class="slider-main" id="slider_main_block"> <div class="slider-main-img"><a href="#"><img src="images/1.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/2.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/3.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/4.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/5.jpg"/></a></div> <div class="slider-main-img"><a href="#"><img src="images/6.jpg"/></a></div> </div> </div> <div class="slider-ctrl" id="slider_ctrl"> <span class="slider-ctrl-pre"></span> <span class="slider-ctrl-next"></span> </div> </div> </body> </html>
四、CSS部分
* { margin: 0; padding: 0; } .w-slider { width:310px; height:265px; margin:100px auto; overflow: hidden; position: relative; } .slider { width:310px; height:220px; } .slider-main { width:620px; height:220px; } .slider-main-img{ width:310px; height:220px; position:absolute; top:0; left:0; } .slider-main-img img{ vertical-align: top; } .slider-ctrl { width:310px; height:45px; text-align:center; } .slider-ctrl span { cursor: pointer; } .slider-ctrl-con { display:inline-block; width:24px; height:20px; margin-right:8px; text-indent: -20em; overflow:hidden; background:url(../images/icon.png)-24px -782px no-repeat; } .slider-ctrl .current { background:url(../images/icon.png)-24px -762px no-repeat; } .slider-ctrl-pre, .slider-ctrl-next { width:27px; height:38px; position:absolute; top:50%; margin-top:-36px; opacity:0.7; filter:alpha(opacity=50); } .slider-ctrl-pre { background:url(../images/icon.png)6px 1px no-repeat; left:0; } .slider-ctrl-next { background:url(../images/icon.png)-9px -44px no-repeat; right:0; }
五、JS部
/** * Created by 15623544233 on 2016/10/17. */ window.onload=function () { //imgs的DOM對象 var slider_main_block =$("slider_main_block"); var sliderImgs =slider_main_block.children; //最外層的slider大盒子 var sider_box =slider_main_block.parentNode.parentNode; //slider-ctrl的DOM對象 var slider_ctrl = $("slider_ctrl"); var sliderCtrls =slider_ctrl.children; //動態(tài)添加Ctrl for(var i=0;i<sliderImgs.length;i++){ var spans = document.createElement("span"); spans.className="slider-ctrl-con"; //span中的數(shù)字為當(dāng)前的索引,后面有重要作用 spans.innerHTML =sliderImgs.length-i; slider_ctrl.insertBefore(spans,sliderCtrls[1]); } sliderCtrls[1].setAttribute("class","current slider-ctrl-con"); //imgW ---圖片寬 var imgW = sliderImgs[0].clientWidth; //讓除第一張圖以外的所有圖右移 for(var i=1;i<sliderImgs.length;i++){ sliderImgs[i].style.left=imgW+"px"; } //至關(guān)重要的標(biāo)志位,currentId 當(dāng)前出現(xiàn)的盒子 var currentId = 0; for(var key in sliderCtrls){ sliderCtrls[key].onclick =function () { //左箭頭點(diǎn)擊的運(yùn)動動畫 if(this.className=="slider-ctrl-pre"){ //與左移動參數(shù)相反 animate(sliderImgs[currentId],{left:imgW}); --currentId<0?currentId=sliderImgs.length-1:currentId; sliderImgs[currentId].style.left=-imgW+"px"; animate(sliderImgs[currentId],{left:0}); //右箭頭的運(yùn)動動畫,與自動輪播的運(yùn)動動畫一致 }else if(this.className=="slider-ctrl-next"){ autoPlay(); }else{ //得到當(dāng)前要點(diǎn)擊的圖片索引號 var that = this.innerHTML-1; if(that>currentId){ //像點(diǎn)擊右側(cè)按鈕一樣播放 animate(sliderImgs[currentId],{left:-imgW}); sliderImgs[that].style.left=imgW+"px"; }else if(that<currentId){ animate(sliderImgs[currentId],{left:imgW}); sliderImgs[that].style.left=-imgW+"px"; } /*當(dāng)點(diǎn)擊按鈕后,當(dāng)前圖片currentId移動后,所點(diǎn)擊的盒子成為當(dāng)前的圖片,使圖片連續(xù)*/ currentId =that; animate(sliderImgs[currentId],{left:0}); } flashCurrent((currentId+1)); }; } //小方塊控制slider動畫的函數(shù) function flashCurrent(index) { //console.log(index); for(var i=1;i<sliderCtrls.length-1;i++){ sliderCtrls[i].setAttribute("class","slider-ctrl-con"); } sliderCtrls[index].setAttribute("class","current slider-ctrl-con"); } //添加定時(shí)器 var timer =null; timer =setInterval(autoPlay,2000); function autoPlay() { animate(sliderImgs[currentId],{left:-imgW}); //當(dāng)?shù)?張左移走后,6>5,第0張回到框中 ++currentId>sliderImgs.length-1?currentId = 0:currentId; //上一張圖片左移后,下一張圖片快速到右邊 sliderImgs[currentId].style.left=imgW+"px"; //下張右側(cè)圖片左移 animate(sliderImgs[currentId],{left:0}); } sider_box.onmouseover =function () { clearInterval(timer); } sider_box.onmouseout=function () { timer =setInterval(autoPlay,2000); } }; function $(id) { return document.getElementById(id); } /*當(dāng)前樣式屬性值的獲取 */ function curStyle(obj,attr){ if(obj.currentStyle){ //IE瀏覽器 return obj.currentStyle[attr]; }else{ //標(biāo)準(zhǔn)瀏覽器 return window.getComputedStyle(obj,null)[attr]; } } /*封裝的運(yùn)動框架*/ /*obj ----做動畫的DOM對象 ;json----變化的部分是json數(shù)據(jù) */ function animate(obj,json) { //調(diào)用時(shí)先清定時(shí)器 clearInterval(obj.timer); //定時(shí)器為obj的內(nèi)部定時(shí)器,不用每次調(diào)用都創(chuàng)建一個新的定時(shí)器 obj.timer = setInterval(function () { //遍歷json數(shù)據(jù),每次遍歷的標(biāo)志位為flag var flag=true; //遍歷json數(shù)據(jù),eg:{left:20,top:40,opacity:50,z-index:3} for(var key in json){ //取得盒子運(yùn)動當(dāng)前的位置 var current= 0; if(key=="opacity"){ //Ie6,7,8沒有設(shè)置透明度,默認(rèn)為undefined current =Math.round(parseInt(curStyle(obj,key)*100))||1; //console.log(current); }else{ current= parseInt(curStyle(obj,key)); } //運(yùn)動步長:(目標(biāo)位置-當(dāng)前位置)/10 var step = (json[key]-current)/10; step = step>0?Math.ceil(step):Math.floor(step); //各屬性值的漸變動畫 if(key=="opacity"){ if("opacity" in obj.style){ obj.style.opacity = (current+step)/100; }else{ //兼容ie6,7,8 obj.style.filter ="alpha(opacity ="+(current+step)*10+")"; } }else if(key=="zIndex"){ obj.style[key] =json[key]; }else { obj.style[key] = current+step+"px"; } //遍歷每個屬性時(shí)都判斷標(biāo)志位 if(current!=json[key]){ flag =false; } }遍歷結(jié)束后,標(biāo)志位都為true,判斷起所有動畫執(zhí)行完畢,清除定時(shí)器 if(flag){ clearInterval(obj.timer); } },20) }
精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Bootstrap中的表單驗(yàn)證插件bootstrapValidator使用方法整理(推薦)
這篇文章主要介紹了Bootstrap中的表單驗(yàn)證插件bootstrapValidator使用方法整理(推薦)的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06bootstrap模態(tài)框彈出和隱藏,動態(tài)改變中間內(nèi)容的實(shí)例
今天小編就為大家分享一篇bootstrap模態(tài)框彈出和隱藏,動態(tài)改變中間內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08js實(shí)現(xiàn)圖片上傳即時(shí)顯示效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)圖片上傳即時(shí)顯示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09完美實(shí)現(xiàn)js選項(xiàng)卡切換效果(一)
這篇文章主要為大家詳細(xì)介紹如何完美實(shí)現(xiàn)js選項(xiàng)卡切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03JavaScript 判斷數(shù)據(jù)類型的4種方法
這篇文章主要介紹了JavaScript 判斷數(shù)據(jù)類型的4種方法,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2020-09-09Smartour 讓網(wǎng)頁導(dǎo)覽變得更簡單(推薦)
這篇文章主要介紹了Smartour 讓網(wǎng)頁導(dǎo)覽變得更簡單(推薦),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07js實(shí)現(xiàn)簡單模態(tài)窗口,背景灰顯
昨天中午做項(xiàng)目需要一個模態(tài)窗口,想起上一個公司的項(xiàng)目經(jīng)理曾經(jīng)做過一個比較牛的模態(tài)窗口,至今沒用搞清楚實(shí)現(xiàn)原理,平時(shí)也沒有時(shí)間去分析,試著自己做了一個,用了一天的時(shí)間終于完成了,給大家一起分享, 也希望高手多提意見。第一次在博客園上發(fā)文章,挺高興的。2008-11-11小程序登錄/注冊頁面設(shè)計(jì)的實(shí)現(xiàn)代碼
這篇文章主要介紹了小程序登錄/注冊頁面設(shè)計(jì)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05