jquery制作多功能輪播圖插件
這是一款多功能幻燈片插件,支持多種配置,css樣式是扒的網(wǎng)上的,里面的代碼原創(chuàng),輕噴~
;(function($) {
"use strict";
var methods = {
o : {
next: "#cycle-next",
prev: "#cycle-prev",
pager : "#cycle-nav",
slider : "#beauty-slider",
timeLine : "#timeLine",
innerTimeLine : "#inner-timeLine",
timeLineNode : "#timeLine-node",
sliderItemClass : "sliderItem",
nodeActive : "node_active",
displays : {fade : "fade",left : "left",right : "right",top : "top",bottom : "bottom"},
navHtml : "<a href='javascript:;' class='&'>?</a>",
navConfig : {navBoxClass : "cycle-nav", navActiveClass: "activeSlide" ,showNum : true}
},
generateId : function(){
return "-" + new Date().getTime();
},
generateTemplate : function(id,settings){
var htmls = new Array();
htmls.push('<div class="slider-wrap">');
htmls.push('<div class="cycleslider-wrap">');
htmls.push('<div id="beauty-slider' + id + '" class="cycleslider"></div>');
if(settings.isArrow) {
htmls.push('<a id="cycle-prev' + id + '" class="cycle-prev" href="javascript:;" title="試試左方向鍵翻頁(yè)">Prev</a>');
htmls.push('<a id="cycle-next' + id + '" class="cycle-next" href="javascript:;" title="試試右方向鍵翻頁(yè)">Next</a>');
}
if(settings.showTimeLine) {
htmls.push('<div class="timeLine" id="timeLine' + id + '">');
htmls.push('<div class="innerTimeLine" id="inner-timeLine' + id + '" style="width:0px;"> </div>');
htmls.push('<div id="timeLine-node' + id + '"></div>');
htmls.push('</div>');
}
if(settings.isNav) {
htmls.push('<div id="cycle-nav' + id + '" class="cycle-nav"></div>');
}
htmls.push('</div>');
htmls.push('<div class="loader"></div>');
htmls.push('</div>');
return htmls;
},
init : function(dom, options) {
var s = this;
var defaults = { url : "", data : {} , auto : false ,time : 2000, overLay : false, isArrow : true, isNav : true ,showTimeLine : false,showTip : false, keyboard : true, display : s.o.displays.fade,navConfig : s.o.navConfig};
var settings = $.extend({},defaults, options);
var id = s.generateId();
$(".slider-wrap .loader").show();
var imgArray = s.returnImgArray(dom, settings);
if (imgArray != null && imgArray.length > 0) {
s["imgcnt" + id] = imgArray.length;
$(dom).html(s.generateTemplate(id,settings).join('')).show();
var slider = $(s.o.slider + id);
var pager = $(s.o.pager + id);
var timeLineNode = $(s.o.timeLineNode + id);
s.o.innerW = $(dom).width() - 20;
var imgHtml = "";
var pageHtml = "";
var timeHtml = "";
$.each(imgArray,function(index,item){
var picClass = index == 0 ? s.o.sliderItemClass : s.o.sliderItemClass + " none";
var navClass = index == 0 ? settings.navConfig.navActiveClass : "";
imgHtml +='<div class="' + picClass + '"><a href="'+ ( s.isParamValid(item.picUrl) ? item.picUrl : "javascript:;" ) +'"><img src="' + item.picPath + '" width="'+item.width+'" height="' +item.height+ '" title="' + item.title + '"/></a></div>';
pageHtml += s.o.navHtml.replace("?", settings.navConfig.showNum ? index + 1 : "").replace("&", navClass);
var left = s.o.innerW * index / s["imgcnt" + id] - 13;
var nodeClass = index == 0 ? s.o.nodeActive : "";
timeHtml +='<div class="node ' + nodeClass + '" style="left: ' + left + 'px;">';
if(settings.showTip) {
timeHtml +='<div class="tooltip">' + item.title + '</div>';
}
timeHtml +='</div>';
});
slider.html(imgHtml);
if(settings.isNav) {
if(settings.navConfig.navBoxClass) {
pager.removeClass(s.o.navConfig.navBoxClass).addClass(settings.navConfig.navBoxClass);
}
pager.html(pageHtml);
}
if(settings.showTimeLine) {
timeLineNode.html(timeHtml);
}
slider.width(s.o.innerW);
slider.find("." + s.o.sliderItemClass).width(s.o.innerW);
$(s.o.timeLine + id).width(s.o.innerW);
if(settings.overLay) {
if($.fn.layerModel) {
$(dom).layerModel({staySame : true, blurClose : true});
} else {
alert("請(qǐng)先引入layerModel插件!");
}
}
s.initBind(id, settings);
s["currentIndex" + id] = 0;
var totalTime = settings.time / 1000 * s["imgcnt" + id];
if(settings.auto) {
if(settings.showTimeLine) {
s.startTimeLine(id , totalTime,settings);
} else {
s.o.timeInterval = window.setInterval(function(){
$("#cycle-next" + id).click();
}, settings.time);
}
}
} else {
return;
}
return dom;
},
startTimeLine : function(id ,time, settings) {
var s = this;
var $innerTimeLine = $(s.o.innerTimeLine + id);
var crnW = $innerTimeLine.width();
for (var i = 0; i < s["imgcnt" + id]; i++) {
var autoW = Math.floor(s.o.innerW * i / s["imgcnt" + id]);
if(crnW == autoW) {
s["currentIndex" + id] = i;
s.updateImgLink(id, settings);
$(s.o.timeLineNode + id).find("div.node").eq(i).addClass(s.o.nodeActive).siblings().removeClass(s.o.nodeActive);
}
}
if(crnW < s.o.innerW) {
$innerTimeLine.animate({width : "+=1px"}, time , 'linear', function(){
s.startTimeLine(id, time, settings);
});
} else {
$innerTimeLine.width(0);
s.startTimeLine(id, time, settings);
}
},
initBind :function(id, settings) {
var s = this;
var isEasing = $.easing.def;
if(settings.isArrow) {
$("#cycle-prev" + id + ", #cycle-next" + id).css({opacity: "0"});
$(".cycleslider-wrap").hover(function(){
$("#cycle-prev" + id).stop().animate({left: "-31", opacity: "1"},200,isEasing ? "easeOutCubic" : "");
$("#cycle-next" + id).stop().animate({right: "-31", opacity: "1"},200,isEasing ?"easeOutCubic" : "");
}, function() {
$("#cycle-prev" + id).stop().animate({left: "-50", opacity: "0"},400,isEasing ?"easeInCubic" : "");
$("#cycle-next" + id).stop().animate({right: "-50", opacity: "0"},400,isEasing ?"easeInCubic" : "");
});
$("#cycle-prev" + id).bind("click",function(){
s["currentIndex" + id] = s["currentIndex" + id] <= 0 ? s["imgcnt" + id] - 1 : s["currentIndex" + id] - 1;
s.updateImgLink(id,settings);
});
$("#cycle-next" + id).bind("click",function(){
s["currentIndex" + id] = s["currentIndex" + id] < s["imgcnt" + id] - 1 ? s["currentIndex" + id] + 1 : 0;
s.updateImgLink(id,settings);
});
}
$(".slider-wrap .loader").hide();
$("a",s.o.pager + id).bind("click",function(){
if ($(this).hasClass(s.o.navConfig.navActiveClass)){
return false;
}
s["currentIndex" + id] = $(this).index();
s.updateImgLink(id,settings);
});
if(settings.auto && settings.showTimeLine) {
$("div.node",s.o.timeLineNode + id).bind({
click : function(){
if($(this).hasClass(s.o.nodeActive)){
return false;
}
s["currentIndex" + id] = $(this).index();
s.updateImgLink(id,settings);
},
mouseover : function(){
if(settings.showTip) {
$(this).find(".tooltip").fadeIn();
}
},
mouseout : function(){
if(settings.showTip) {
$(this).find(".tooltip").fadeOut();
}
}
});
}
// 鍵盤操作
if(settings.keyboard){
$(window).keydown(function(event){
//<---
if(event.keyCode == 37){
$("#cycle-prev" + id).click();
}
//--->
if(event.keyCode == 39){
$("#cycle-next" + id).click();
}
});
}
},
updateImgLink : function(id, settings){
var s = this;
var index = s["currentIndex" + id];
var display = settings.display;
var isEasing = $.easing.def;
var $items = $("div." + s.o.sliderItemClass,s.o.slider + id);
switch (display) {
case s.o.displays.fade :
$items.eq(index).show().siblings().hide();
break;
case s.o.displays.left :
$items.css({ position : "absolute", top : 0, left : s.o.innerW }).hide();
$items.eq(index).animate({ left : 0 }, 100, isEasing ? "easeOutCubic" : "").show();
$(s.o.slider + id).height(s.getImgMaxHeight(id));
break;
case s.o.displays.right :
$items.css({ position : "absolute", top : 0, right : s.o.innerW }).hide();
$items.eq(index).animate({ right : 0 }, 100, isEasing ? "easeOutCubic" : "").show();
$(s.o.slider + id).height(s.getImgMaxHeight(id));
break;
case s.o.displays.top :
break;
case s.o.displays.bottom :
break;
default :
break;
}
$("a",s.o.pager + id).eq(index).addClass(settings.navConfig.navActiveClass).siblings().removeClass(settings.navConfig.navActiveClass);
// 更新進(jìn)度條的信息
if(settings.auto && settings.showTimeLine) {
var indexWidth = Math.floor(s.o.innerW * index / s["imgcnt" + id]);
$(s.o.innerTimeLine + id).animate({width : indexWidth +"px"}, 500 , 'linear', function(){
$(s.o.timeLineNode + id).find("div.node").eq(index).addClass(s.o.nodeActive).siblings().removeClass(s.o.nodeActive);
});
}
},
getImgMaxHeight : function(id) {
var s = this;
var slider = $(s.o.slider + id);
var maxHeight = 0;
$.each(slider.find("img"),function(index,item){
var imgHeight = this.height;
maxHeight = Math.max(maxHeight,imgHeight);
});
return maxHeight;
},
returnImgArray : function(dom,settings){
var s = this;
var imgArray = new Array();
var url = settings.url;
if (s.isParamValid(url)) {
$.ajax({
url : url + "?t=" + new Date().getTime(),
type : 'POST',
async : false,
data : settings.data,
dataType : 'json',
success : function(data) {
if (s.isParamValid(data)) {
$.each(data, function(index, item) {
imgArray.push(item);
});
}
},
error : function() {
alert("圖片數(shù)據(jù)源地址無(wú)效...");
return null;
},
complete : function(XHR, TS) { XHR = null; }
});
} else {
var imgs = $(dom).find("img");
if (imgs != null && imgs.length > 0) {
$.each(imgs,function(i,o){
var pic = new Object();
pic.picUrl = $(o).parent("a").attr("href");
pic.picPath = $(o).attr("src");
pic.width = $(o).attr("width");
pic.height = $(o).attr("height");
pic.title = $(o).attr("title");
imgArray.push(pic);
});
}
}
return imgArray;
},
isParamValid : function(v) {
return !(v == "" || v == null || v == undefined);
}
};
$.fn.beautyFocus = function(options) {
return this.each(function(index,item) {
methods.init(item, options);
});
};
})(jQuery);
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- jQuery實(shí)現(xiàn)經(jīng)典的網(wǎng)頁(yè)3D輪播圖封裝功能【附源碼下載】
- 利用jquery寫的左右輪播圖特效
- jQuery自適應(yīng)輪播圖插件Swiper用法示例
- JQuery和html+css實(shí)現(xiàn)帶小圓點(diǎn)和左右按鈕的輪播圖實(shí)例
- jQuery無(wú)縫輪播圖代碼
- 基于jQuery實(shí)現(xiàn)淡入淡出效果輪播圖
- jQuery制作全屏寬度固定高度輪播圖(實(shí)例講解)
- jQuery實(shí)現(xiàn)簡(jiǎn)潔的輪播圖效果實(shí)例
- jquery實(shí)現(xiàn)左右輪播圖效果
- jQuery實(shí)現(xiàn)帶3D切割效果的輪播圖功能示例【附源碼下載】
相關(guān)文章
淺談jQuery中的eq()與DOM中element.[]的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談jQuery中的eq()與DOM中element.[]的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
jQuery實(shí)現(xiàn)消息滾動(dòng)播放效果
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)消息滾動(dòng)播放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
checkbox:click事件觸發(fā)span元素內(nèi)容改變的方法
下面小編就為大家?guī)?lái)一篇checkbox:click事件觸發(fā)span元素內(nèi)容改變的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
jQuery實(shí)現(xiàn)的移動(dòng)端圖片縮放功能組件示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的移動(dòng)端圖片縮放功能組件,結(jié)合實(shí)例形式詳細(xì)分析了jQuery基于移動(dòng)端的圖片縮放功能組件實(shí)現(xiàn)原理、步驟、核心代碼及使用技巧,需要的朋友可以參考下2020-05-05
jquery eval解析JSON中的注意點(diǎn)介紹
在JS中將JSON的字符串解析成JSON數(shù)據(jù)格式,一般有兩種方式:使用eval()函數(shù)、使用Function對(duì)象來(lái)進(jìn)行返回解析,下面有個(gè)示例,感興趣的朋友可以參考下2013-08-08
基于jQuery的公告無(wú)限循環(huán)滾動(dòng)實(shí)現(xiàn)代碼
今天看到一個(gè)網(wǎng)站的公告欄一個(gè)小效果,如果有2條公告或以上就有個(gè)滾動(dòng)效果,特整理下分享給大家2012-05-05
通過(guò)jsonp獲取json數(shù)據(jù)實(shí)現(xiàn)AJAX跨域請(qǐng)求
JSON 可通過(guò) JavaScript 進(jìn)行解析,JSON 數(shù)據(jù)可使用 AJAX 進(jìn)行傳輸,這篇文章主要介紹了通過(guò)jsonp獲取json數(shù)據(jù)(實(shí)現(xiàn)AJAX跨域請(qǐng)求),有興趣的可以了解一下。2017-01-01

