JavaScript實(shí)現(xiàn)旋轉(zhuǎn)輪播圖
最近一直在學(xué)習(xí)JavaScript,然后看到旋轉(zhuǎn)輪播圖的案例,就嘗試著用js做了一個(gè)簡(jiǎn)單的輪播圖,因?yàn)闊o(wú)法顯示動(dòng)態(tài)效果,所以就放個(gè)截圖:

這個(gè)效果是這樣的:一共有7張圖片,它們會(huì)自動(dòng)地向左滑動(dòng),然后左右箭頭也可以控制輪播圖的左滑和右滑,同時(shí),如果鼠標(biāo)停在圖片上,那么輪播圖會(huì)停止自動(dòng)滑動(dòng),當(dāng)鼠標(biāo)移開(kāi)時(shí),將會(huì)繼續(xù)向左輪播。
首先,我這里封裝了兩個(gè)函數(shù)(因?yàn)闀呵疫€沒(méi)有學(xué)jQuery,所以用了封裝函數(shù)的方法來(lái)實(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)畫(huà)函數(shù),用json實(shí)現(xiàn)多條樣式的動(dòng)態(tài)改變,從而達(dá)到一個(gè)動(dòng)畫(huà)效果,代碼如下: `
function animate(element, json, fun) {
clearInterval(element.timer);
function getStyle(element, styleName){
if(element.currentStyle){
//ie瀏覽器下 直接通過(guò)currentstyle來(lái)獲取
//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)畫(huà)的類(lèi)型為透明度時(shí) 獲取的值應(yīng)該是浮點(diǎn)類(lèi)型
current = parseFloat(getStyle(element, key)) || 1;
} else {
//其他情況 用整數(shù)類(lèi)型
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)畫(huà)完成');
if (typeof fun == 'function') {
fun();
}
}
}, 30);
}`
接下來(lái)就要寫(xiě)html的部分了,因?yàn)橹挥袔讖垐D片,所以html的部分很簡(jiǎn)單:
<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是部分啦,代碼也很簡(jiǎn)單,理清楚就好
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)
}
}
以上就是旋轉(zhuǎn)輪播圖的全部?jī)?nèi)容了,給自己的學(xué)習(xí)過(guò)程做個(gè)簡(jiǎn)單的記錄,也順便鞏固一下。
相關(guān)文章
利用jsPDF實(shí)現(xiàn)將圖片轉(zhuǎn)為pdf
這篇文章主要為大家詳細(xì)介紹了如何利用jsPDF實(shí)現(xiàn)將圖片轉(zhuǎn)為pdf的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-08-08
input獲取焦點(diǎn)時(shí)底部菜單被頂上來(lái)問(wèn)題的解決辦法
這篇文章主要介紹了解決input獲取焦點(diǎn)時(shí)底部菜單被頂上來(lái)問(wèn)題的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-01-01
微信小程序網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求服務(wù)實(shí)現(xiàn)詳解
這篇文章主要介紹了微信小程序網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10

