您好,登錄后才能下訂單哦!
小編給大家分享一下js如何實現炫酷的左右輪播圖,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
本文實例為大家分享了js左右輪播圖的具體代碼,供大家參考,具體內容如下
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"); //設置第一個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; //設置當前顯示的圖片的索引號 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";//快速執行,即將顯示的一頁立馬走到左邊,然后顯示 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";//快速執行,即將顯示的一頁立馬走到右邊,然后左移顯示 animate(imgs[iNow],{left:0}); //下一張圖片左移,從310px->0 setSquare(); //或者精簡為函數 /*autoPlay();*/ }else{ /*alert("點擊了下面的span");*/ var clickIndex = this.innerHTML - 1; if(clickIndex > iNow){ //做法等同于右側按鈕 animate(imgs[iNow],{left: -scrollWidth}); imgs[clickIndex].style.left = scrollWidth + "px";//快速執行,即將顯示的一頁立馬走到右邊,然后左移顯示 }else if(clickIndex < iNow){ //做法等同于左側 animate(imgs[iNow],{left: scrollWidth}); imgs[clickIndex].style.left = -scrollWidth + "px";//快速執行,即將顯示的一頁立馬走到左邊,然后顯示 } iNow = clickIndex; animate(imgs[iNow],{left:0}); setSquare(); } } } //控制span小方塊的樣式 函數 function setSquare(){ //下面的span樣式清空,將iNow設置為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 } //設置定時器 ,和右側按鈕功能一致 var timer =null; timer = setInterval(autoPlay,2000); function autoPlay(){ animate(imgs[iNow],{left: -scrollWidth}); iNow = (++iNow) % imgs.length; imgs[iNow].style.left = scrollWidth + "px";//快速執行,即將顯示的一頁立馬走到右邊,然后左移顯示 animate(imgs[iNow],{left:0}); //下一張圖片左移,從310px->0 setSquare(); } //清除定時器 js_slider.onmouseover = function(){ clearInterval(timer); } //開啟定時器 js_slider.onmouseout = function(){ clearInterval(timer); //要執行定時器,先清除定時器 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)); // 數值,去除樣式的 “px” } // console.log(current); // 目標位置就是 屬性值 var step = ( json[attr] - current) / 10; // 步長 用目標位置 - 現在的位置 / 10 step = step > 0 ? Math.ceil(step) : Math.floor(step); //判斷透明度 if(attr == "opacity") // 判斷用戶有沒有輸入 opacity { if("opacity" in obj.style) // 判斷 我們瀏覽器是否支持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) // 很簡單 當定時器停止了。 動畫就結束了 如果有回調,就應該執行回調 { fn(); // 函數名 + () 調用函數 執行函數 暫且這樣替代 } } },30) }
看完了這篇文章,相信你對“js如何實現炫酷的左右輪播圖”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。