輪播圖組件js代碼
本文實(shí)例為大家分享了JavaScript輪播圖組件代碼,供大家參考,具體內(nèi)容如下
//輪播圖組件 function Rolling(o) { this.index = ++o.index || 1; //當(dāng)前滾動的位置,當(dāng)index大于可輪播的次數(shù)listLength或者等于0,為不可滾動狀態(tài) this.num = o.num || 1; //默認(rèn)滾動一個列表 this.obj = o.obj || null; //要輪播的對象ul this.perObj = o.perObj || null; //向上翻頁的按鈕對象 this.nextObj = o.nextObj || null; //向下翻頁的按鈕對象 this.focusPoint = o.focusPoint || null; //焦點(diǎn)對象,默認(rèn)為null。意思不開啟焦點(diǎn)對象,如要開啟可傳入焦點(diǎn)對象可自動開啟 this.focusClass = o.focusClass || 'mien-active'; //當(dāng)前焦點(diǎn)位置類名 this.replaceBtn = o.replaceBtn || false;//是否在輪播到第一頁或最后一頁時替換翻頁按鈕圖片。默認(rèn)值為true,并替換按鈕圖片為re+圖片名。如:per.png替換成re-per.ping console.log(o.replaceBtn) this.listLength = Math.ceil(o.obj.find('li').length / this.num); //可輪播的次數(shù) this.listObj = o.obj.children('li'); this.listWidth =this.listObj.width() + parseInt(this.listObj.css('margin-left')) + parseInt(this.listObj.css('margin-right')); //列表寬度 this.init(); //初始化 }; Rolling.prototype.init = function() { var thisObj = this; this.initLeft(); this.replaceFun(); if(this.focusPoint !== null) { this.createFocusPoint(); } this.perObj.unbind('click').on('click', function() { thisObj.rollPrev(); }); this.nextObj.unbind('click').on('click', function() { thisObj.rollNext(); }); } //創(chuàng)建焦點(diǎn),并給當(dāng)前位置的焦點(diǎn)添加類mien-active Rolling.prototype.createFocusPoint = function() { var str = '', thisObj = this; for(var i = 0; i < this.listLength; i++) { if(i == this.index - 1) { str += '<li class="' + this.focusClass + '"></li>'; } else { str += '<li></li>'; } } this.focusPoint.append(str); this.focusPoint.children().click(function() { var oldIndex = $('.' + thisObj.focusClass).index() + 1; //之前的焦點(diǎn)位置 var index = $(this).index() + 1; //當(dāng)前點(diǎn)擊的焦點(diǎn) var sum = index - oldIndex; var perObject = thisObj.perObj.find('img'); var nextObject = thisObj.nextObj.find('img'); if (index == 1 && !thisObj.replaceBtn){ perObject.attr('src',perObject.attr('data-src')); nextObject.attr('src',nextObject.attr('data-src')); }else if (index == thisObj.listLength && !thisObj.replaceBtn){ perObject.attr('src',perObject.attr('re-src')); nextObject.attr('src',nextObject.attr('re-src')); }else if (!thisObj.replaceBtn){ perObject.attr('src',perObject.attr('re-src')); nextObject.attr('src',nextObject.attr('data-src')); } thisObj.index += sum; if(sum > 0) { thisObj.obj.animate({ marginLeft: '-=' + Math.abs(sum) * thisObj.num * thisObj.listWidth + 'px' }); } if(sum < 0) { thisObj.obj.animate({ marginLeft: '+=' + Math.abs(sum) * thisObj.num * thisObj.listWidth + 'px' }); } $(this).addClass(thisObj.focusClass).siblings().removeClass(thisObj.focusClass); }); } Rolling.prototype.initLeft = function() { if(this.index == 1) { return; } this.obj.css('margin-left', -(this.index - 1) * this.listWidth); //初始化全屏圖片顯示的位置 } Rolling.prototype.rollPrev = function() { --this.index; //當(dāng)點(diǎn)擊到第一頁就return if (this.index <= 1 && !this.replaceBtn){ this.perObj.find('img').attr('src',this.perObj.find('img').attr('data-src')); } if(!this.thisIndex()) { ++this.index; return; } if (!this.replaceBtn){ this.nextObj.find('img').attr('src',this.nextObj.find('img').attr('data-src')); } this.obj.animate({ marginLeft: '+=' + this.num * this.listWidth + 'px' }); if(this.focusPoint !== null) { $('.' + this.focusClass).removeClass(this.focusClass).prev().addClass(this.focusClass); } } Rolling.prototype.rollNext = function() { ++this.index; if (this.index == this.listLength && !this.replaceBtn){ this.nextObj.find('img').attr('src',this.nextObj.find('img').attr('re-src')); } //當(dāng)點(diǎn)擊到最后一頁就return if(!this.thisIndex()) { --this.index; return; } if (!this.replaceBtn){ this.perObj.find('img').attr('src',this.perObj.find('img').attr('re-src')); } this.obj.animate({ marginLeft: '-=' + this.num * this.listWidth + 'px' }); if(this.focusPoint !== null) { $('.' + this.focusClass).removeClass(this.focusClass).next().addClass(this.focusClass); } } Rolling.prototype.replaceFun = function(){ var perObject = this.perObj.find('img'), nextObject = this.nextObj.find('img'); var perSrc = perObject.attr('src'), nextSrc = nextObject.attr('src'); perObject.attr({'data-src':perSrc,'re-src':this.splitSrc(perSrc)}); nextObject.attr({'data-src':nextSrc,'re-src':this.splitSrc(nextSrc)}); } Rolling.prototype.splitSrc = function(str){ var list = str.split('/'); var data = list[list.length-1]; var sub = data.substr(0,data.indexOf('.')); return str.replace(sub,'re-' + sub); } Rolling.prototype.thisIndex = function() { if(this.index > this.listLength | this.index <= 0) { return false; } return true; } function createRolling(o) { return new Rolling(o); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解JS去重及字符串奇數(shù)位小寫轉(zhuǎn)大寫
本篇文章主要介紹了詳解JS去重及字符串奇數(shù)位小寫轉(zhuǎn)大寫 ,非常具有實(shí)用價值,需要的朋友可以參考下。2016-12-12JavaScript實(shí)現(xiàn)防止網(wǎng)頁被嵌入Frame框架的代碼分享
這篇文章主要介紹了JavaScript實(shí)現(xiàn)防止網(wǎng)頁被嵌入Frame框架的代碼分享,本文給出了2種防嵌入方法,需要的朋友可以參考下2014-12-12JS中把函數(shù)作為另一函數(shù)的參數(shù)傳遞方法(總結(jié))
下面小編就為大家?guī)硪黄狫S中把函數(shù)作為另一函數(shù)的參數(shù)傳遞方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06JSONP獲取Twitter和Facebook文章數(shù)的具體步驟
這篇文章主要介紹了JSONP獲取Twitter和Facebook文章數(shù)的方法,需要的朋友可以參考下2014-02-02js百度地圖鼠標(biāo)滾輪縮放導(dǎo)致地圖中心點(diǎn)偏移問題
本文主要介紹了js百度地圖鼠標(biāo)滾輪縮放導(dǎo)致地圖中心點(diǎn)偏移問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02JavaScript組件焦點(diǎn)與頁內(nèi)錨點(diǎn)間傳值的方法
這篇文章主要介紹了JavaScript組件焦點(diǎn)與頁內(nèi)錨點(diǎn)間傳值的方法,涉及輸入框與錨點(diǎn)的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-02-02