js實現(xiàn)炫酷的左右輪播圖
本文實例為大家分享了js左右輪播圖的具體代碼,供大家參考,具體內(nèi)容如下
html代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta keyword="左右輪播圖-效果比較好"> <title>Document</title> <link rel="stylesheet" type="text/css" href="css/css.css"> <script type="text/javascript" src="js/animate.js"></script> <script type="text/javascript" src="js/slider.js"></script> </head> <body> <div class="w-slider" id="js_slider"> <div class="slider"> <div class="slider-main" id="slider_main"> <div class="slider-main-img"><a href="#"><img src="images/1.jpg" alt=""></a></div> <div class="slider-main-img"><a href="#"><img src="images/2.jpg" alt=""></a></div> <div class="slider-main-img"><a href="#"><img src="images/3.jpg" alt=""></a></div> <div class="slider-main-img"><a href="#"><img src="images/4.jpg" alt=""></a></div> <div class="slider-main-img"><a href="#"><img src="images/5.jpg" alt=""></a></div> <div class="slider-main-img"><a href="#"><img src="images/6.jpg" alt=""></a></div> </div> </div> <div class="slider-ctrl" id="slider_ctrl"> <span class="slider-ctrl-prev"></span> <!-- <span class="slider-ctrl-con current"></span> <span class="slider-ctrl-con"></span> <span class="slider-ctrl-con"></span> <span class="slider-ctrl-con"></span> <span class="slider-ctrl-con"></span> <span class="slider-ctrl-con"></span> --> <span class="slider-ctrl-next"></span> </div> </div> <script> </script> </body> </html>
主要css代碼:
.w-slider{ width: 310px; height: 265px; background-color: pink; margin: 100px auto; position: relative; overflow: hidden; } .slider{ width: 310px; height: 220px; } .slider-main{ width: 620px; /* 兩個圖片的寬度 */ height: 310px; } .slider-main img{ vertical-align: top; /* 消除圖片上下3px的間隙 */ } .slider-main-img{ position: absolute; top: 0; left: 0; } .slider-ctrl{ text-align:center; padding-top: 8px; } .slider-ctrl-con{ display: inline-block; width: 24px; height: 20px; background-color: blue; margin: 0 5px; background: url(../images/icon.png) no-repeat -24px -782px; cursor: pointer; text-indent: -20em; /* 為了將span的標號隱藏掉 */ overflow: hidden; } .slider-ctrl .current{ background-position: -24px -762px; } .slider-ctrl-prev,.slider-ctrl-next{ position: absolute; top: 50%; margin-top: -35px; display: inline-block; width: 30px; height: 35px; background: url(../images/icon.png) no-repeat 6px top; opacity: 0.8; cursor: pointer; } .slider-ctrl-prev{ left: 0; } .slider-ctrl-next{ right: 0; background-position: -6px -44px; }
主要js代碼(slider.js):
window.onload = function(){ function $(id){ return document.getElementById(id);} var js_slider = $("js_slider"); var slider_main = $("slider_main"); //獲取輪播圖片的父盒子 var imgs = slider_main.children; //得到圖片組 var slider_ctrl = $("slider_ctrl"); //獲取控制的 父盒子 //生成控制輪播的span for(var i = 0; i< imgs.length; i++){ var span = document.createElement("span"); span.className = "slider-ctrl-con"; span.innerHTML = imgs.length - i; slider_ctrl.insertBefore(span,slider_ctrl.children[1]); } var spans = slider_ctrl.children; spans[1].setAttribute("class","slider-ctrl-con current"); //設(shè)置第一個span增加current樣式 //布局圖片,第一張在正確位置,其余的在右邊 var scrollWidth = js_slider.clientWidth; //獲取大盒子的寬度,也就是后面動畫走的距離 for(var i=1; i<imgs.length; i++){ //第一張圖片在正確位置 imgs[i].style.left = scrollWidth + "px"; //其余圖片在310px的位置 } //遍歷三個按鈕--左、右和下面的span var iNow = 0; //設(shè)置當前顯示的圖片的索引號 for(var k in spans){ //k是索引號 spans[k].onclick = function(){ if(this.className == "slider-ctrl-prev"){ //當前圖片右移(從0 -> 310px) animate(imgs[iNow],{left: scrollWidth}); iNow = --iNow < 0 ? imgs.length-1 : iNow; imgs[iNow].style.left = -scrollWidth + "px";//快速執(zhí)行,即將顯示的一頁立馬走到左邊,然后顯示 animate(imgs[iNow],{left:0}); //下一張圖片右移,從-310px->0 setSquare(); }else if(this.className == "slider-ctrl-next"){ //當前圖片左移(從0 -> -310px) animate(imgs[iNow],{left: -scrollWidth}); iNow = (++iNow) % imgs.length; imgs[iNow].style.left = scrollWidth + "px";//快速執(zhí)行,即將顯示的一頁立馬走到右邊,然后左移顯示 animate(imgs[iNow],{left:0}); //下一張圖片左移,從310px->0 setSquare(); //或者精簡為函數(shù) /*autoPlay();*/ }else{ /*alert("點擊了下面的span");*/ var clickIndex = this.innerHTML - 1; if(clickIndex > iNow){ //做法等同于右側(cè)按鈕 animate(imgs[iNow],{left: -scrollWidth}); imgs[clickIndex].style.left = scrollWidth + "px";//快速執(zhí)行,即將顯示的一頁立馬走到右邊,然后左移顯示 }else if(clickIndex < iNow){ //做法等同于左側(cè) animate(imgs[iNow],{left: scrollWidth}); imgs[clickIndex].style.left = -scrollWidth + "px";//快速執(zhí)行,即將顯示的一頁立馬走到左邊,然后顯示 } iNow = clickIndex; animate(imgs[iNow],{left:0}); setSquare(); } } } //控制span小方塊的樣式 函數(shù) function setSquare(){ //下面的span樣式清空,將iNow設(shè)置為current,注意是下面的span,不包含左右控制按鈕 for(var i=1; i<spans.length-1; i++){ spans[i].className = "slider-ctrl-con"; } spans[iNow+1].className = "slider-ctrl-con current"; //注意iNow是索引號,要加1 } //設(shè)置定時器 ,和右側(cè)按鈕功能一致 var timer =null; timer = setInterval(autoPlay,2000); function autoPlay(){ animate(imgs[iNow],{left: -scrollWidth}); iNow = (++iNow) % imgs.length; imgs[iNow].style.left = scrollWidth + "px";//快速執(zhí)行,即將顯示的一頁立馬走到右邊,然后左移顯示 animate(imgs[iNow],{left:0}); //下一張圖片左移,從310px->0 setSquare(); } //清除定時器 js_slider.onmouseover = function(){ clearInterval(timer); } //開啟定時器 js_slider.onmouseout = function(){ clearInterval(timer); //要執(zhí)行定時器,先清除定時器 timer = setInterval(autoPlay,2000); } }
緩動動畫js代碼:(animate.js)
//返回當前樣式 function getStyle(obj,attr){ //obj對象,attr屬性名 if(obj.currentStyle){ //ie等 return obj.currentStyle[attr]; }else{ //w3c return window.getComputedStyle(obj,null)[attr]; } } function animate(obj,json,fn) { // 給誰 json clearInterval(obj.timer); obj.timer = setInterval(function() { var flag = true; // 用來判斷是否停止定時器 一定寫到遍歷的外面 for(var attr in json){ // attr 屬性 json[attr] 值 //開始遍歷 json // 計算步長 用 target 位置 減去當前的位置 除以 10 // console.log(attr); var current = 0; if(attr == "opacity") { current = Math.round(parseInt(getStyle(obj,attr)*100)) || 0; //用戶沒有定義opacity,則返回undefined console.log(current); } else { current = parseInt(getStyle(obj,attr)); // 數(shù)值,去除樣式的 “px” } // console.log(current); // 目標位置就是 屬性值 var step = ( json[attr] - current) / 10; // 步長 用目標位置 - 現(xiàn)在的位置 / 10 step = step > 0 ? Math.ceil(step) : Math.floor(step); //判斷透明度 if(attr == "opacity") // 判斷用戶有沒有輸入 opacity { if("opacity" in obj.style) // 判斷 我們?yōu)g覽器是否支持opacity { // obj.style.opacity,//支持opacity-----opacity:0.3 obj.style.opacity = (current + step) /100; } else { // obj.style.filter = alpha(opacity = 30) obj.style.filter = "alpha(opacity = "+(current + step)* 10+")"; } } else if(attr == "zIndex") { obj.style.zIndex = json[attr]; } else { obj.style[attr] = current + step + "px" ; } if(current != json[attr]) // 只要其中一個不滿足條件 就不應該停止定時器 這句一定遍歷里面 { flag = false; } } if(flag) // 用于判斷定時器的條件 { clearInterval(obj.timer); //alert("ok了"); if(fn) // 很簡單 當定時器停止了。 動畫就結(jié)束了 如果有回調(diào),就應該執(zhí)行回調(diào) { fn(); // 函數(shù)名 + () 調(diào)用函數(shù) 執(zhí)行函數(shù) 暫且這樣替代 } } },30) }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
httpclient模擬登陸具體實現(xiàn)(使用js設(shè)置cookie)
最簡單的方法就是通過得到的cookie定制一個httpclient,感興趣的朋友可以了解下本文2013-12-12inputSuggest文本框輸入時提示、自動完成效果(郵箱輸入自動補全插件)
inputSuggest在文本框輸入字符時提示,類似Windows的“自動完成”功能,當在文本框輸入字符時,與此相關(guān)的內(nèi)容會顯示在文本框的下邊,你可隨時使用鍵盤或鼠標點選那些提示,你就不用輸入了2012-05-05javascript設(shè)計模式 – 享元模式原理與用法實例分析
這篇文章主要介紹了javascript設(shè)計模式 – 享元模式,結(jié)合實例形式分析了javascript享元模式相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下2020-04-04javascript在網(wǎng)頁中實現(xiàn)讀取剪貼板粘貼截圖功能
這篇文章主要介紹了在網(wǎng)頁中實現(xiàn)讀取剪貼板粘貼截圖功能,即可以把剪貼板的截圖Ctrl+V粘貼到網(wǎng)頁的一個輸入框中,例如QQ截圖、旺旺截圖或者其它截圖軟件,需要的朋友可以參考下2014-06-06Extjs4中tree的拖拽功能(可以兩棵樹之間拖拽) 簡單實例
這篇文章主要介紹了Extjs4中tree的拖拽功能簡單實例,有需要的朋友可以參考一下2013-12-12出現(xiàn)“不能執(zhí)行已釋放的Script代碼”錯誤的原因及解決辦法
出現(xiàn)“不能執(zhí)行已釋放的Script代碼”錯誤的原因及解決辦法...2007-08-08