最近一直在學(xué)習(xí)JavaScript,然后看到旋轉(zhuǎn)輪播圖的案例,就嘗試著用js做了一個(gè)簡單的輪播圖,因?yàn)闊o法顯示動(dòng)態(tài)效果,所以就放個(gè)截圖:
這個(gè)效果是這樣的:一共有7張圖片,它們會(huì)自動(dòng)地向左滑動(dòng),然后左右箭頭也可以控制輪播圖的左滑和右滑,同時(shí),如果鼠標(biāo)停在圖片上,那么輪播圖會(huì)停止自動(dòng)滑動(dòng),當(dāng)鼠標(biāo)移開時(shí),將會(huì)繼續(xù)向左輪播。
首先,我這里封裝了兩個(gè)函數(shù)(因?yàn)闀呵疫€沒有學(xué)jQuery,所以用了封裝函數(shù)的方法來實(shí)現(xiàn)),第一個(gè)函數(shù)是$函數(shù),調(diào)用可以獲取html中的元素,代碼如下:
`function $(select){ if (typeof select != 'string') { console.log('傳入的參數(shù)有誤'); return null; } var firstChar = select.charAt(0); switch(firstChar){ case '#': return document.getElementById(select.substr(1)); break; case '.': if (document.getElementsByClassName){ return document.getElementsByClassName(select.substr(1)); } else { var result = []; var allElemnts = document.getElementsByTagName('*'); console.log(allElemnts); for (var i = 0; i < allElemnts.length; i++){ var e = allElemnts[i]; var className = e.className; var classArr = className.split(' '); for (var j = 0; j < classArr.length; j++){ var c = classArr[j]; if (c == select.substr(1)) { result.push(e); break; } } } return result; } break; default : return document.getElementsByTagName(select); } }`
第二個(gè)函數(shù)是一個(gè)動(dòng)畫函數(shù),用json實(shí)現(xiàn)多條樣式的動(dòng)態(tài)改變,從而達(dá)到一個(gè)動(dòng)畫效果,代碼如下: `
function animate(element, json, fun) { clearInterval(element.timer); function getStyle(element, styleName){ if(element.currentStyle){ //ie瀏覽器下 直接通過currentstyle來獲取 //return element.currentStyle.heigh; return element.currentStyle[styleName]; }else{ var computedStyle = window.getComputedStyle(element,null); return computedStyle[styleName]; } } var isStop = false; element.timer = setInterval(function () { isStop = true; for (var key in json){ var target = json[key]; var current; if (key == 'opacity') { //當(dāng)動(dòng)畫的類型為透明度時(shí) 獲取的值應(yīng)該是浮點(diǎn)類型 current = parseFloat(getStyle(element, key)) || 1; } else { //其他情況 用整數(shù)類型 current = parseInt(getStyle(element, key)) || 0; } var step = (target - current) / 10; if (key != 'opacity') { step = step > 0 ? Math.ceil(step) : Math.floor(step); } current += step; if (key == 'opacity') { if (Math.abs(target - current) > 0.01) { isStop = false; } else { current = target; } element.style.opacity = current + ''; } else { if (Math.abs(target-current) > Math.abs(step)) { isStop = false; } else { current = target; } if (key == 'zIndex'){ element.style.zIndex = Math.round(current); } else { element.style[key] = current + 'px'; } } } if (isStop) { clearInterval(element.timer); console.log('動(dòng)畫完成'); if (typeof fun == 'function') { fun(); } } }, 30); }`
接下來就要寫html的部分了,因?yàn)橹挥袔讖垐D片,所以html的部分很簡單:
<body> <div class="box"> <div class="content"> <ul> <li><a href="#"><img src="./images/1.jpg"></a></li> <li><a href="#"><img src="./images/2.jpg"></a></li> <li><a href="#"><img src="./images/3.jpg"></a></li> <li><a href="#"><img src="./images/4.jpg" class="current"></a></li> <li><a href="#"><img src="./images/5.jpg"></a></li> <li><a href="#"><img src="./images/6.jpg"></a></li> <li><a href="#"><img src="./images/7.jpg"></a></li> </ul> </div> <div class="control"> <a href="javascript:;" id="prev"></a> <a href="javascript:;" id="next"></a> </div> </div> </body>
css樣式的部分也不多做敘述。
下面就是JS是部分啦,代碼也很簡單,理清楚就好
window.onload = function(){ //定位,并給圖片設(shè)置大小透明度 var json = [{ width: 630, top: 23, left: 0, zIndex: 2, opacity: 0 },{ width: 630, top: 23, left: 0, zIndex: 3, opacity: 0 },{ width: 630, top: 23, left: 0, zIndex: 4, opacity: 0.6 },{ width: 730, top: 0, left: 125, zIndex: 5, opacity: 1 },{ width: 630, top: 23, left: 350, zIndex: 4, opacity: 0.6 },{ width: 630, top: 23, left: 350, zIndex: 3, opacity: 0 },{ width: 630, top: 23, left: 350, zIndex: 2, opacity: 0 }];
function refreshImageLocatin(index){ //默認(rèn)情況下 第i張圖對(duì)應(yīng)第i個(gè)位置 //index=1時(shí) 第i個(gè)圖對(duì)應(yīng)i-1個(gè)位置 //也就是第i個(gè)圖對(duì)應(yīng)i-index的位置 var liArr = $('li'); for(var i = 0; i < liArr.length; i++){ var li = liArr[i]; var locationIndex = i - index; console.log('i='+i); console.log('index='+index); console.log('locationIndex='+locationIndex); if(locationIndex < 0){ locationIndex += 7; } var locationData = json[locationIndex]; animate(li, locationData, null); } } refreshImageLocatin(0); var index = 0; $('#next').onclick = function(){ index++; if(index == 7){ index = 0; } refreshImageLocatin(index); } $('#prev').onclick = function(){ index--; if(index < 0){ index = 6; } refreshImageLocatin(index); } var nextImage = $('#next').onclick; var contentBox = $('.content')[0]; //自動(dòng)播放 var timer = setInterval(nextImage, 3000); //當(dāng)鼠標(biāo)移動(dòng)到圖片上,停止播放 contentBox.onmouseover = function(){ clearInterval(timer); } contentBox.onmouseout = function(){ timer = setInterval(nextImage ,3000) } }
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com