首页 > 语言 > JavaScript > 正文

jquery制作多功能轮播图插件

2024-05-06 16:18:11
字体:大 中 小
来源:转载
供稿:网友

本文给大家分享的是一款基于jQuery制作的多功能的轮播幻灯插件,支持多种配置,十分的实用,这里推荐给大家,有需要的小伙伴可以参考下。

这是一款多功能幻灯片插件,支持多种配置,css样式是扒的网上的,里面的代码原创,轻喷~

 

 
  1. ;(function($) { 
  2. "use strict"; 
  3. var methods = { 
  4. o : { 
  5. next: "#cycle-next", 
  6. prev: "#cycle-prev", 
  7. pager : "#cycle-nav", 
  8. slider : "#beauty-slider", 
  9. timeLine : "#timeLine", 
  10. innerTimeLine : "#inner-timeLine", 
  11. timeLineNode : "#timeLine-node", 
  12. sliderItemClass : "sliderItem", 
  13. nodeActive : "node_active", 
  14. displays : {fade : "fade",left : "left",right : "right",top : "top",bottom : "bottom"}, 
  15. navHtml : "<a href='javascript:;' class='&'>?</a>", 
  16. navConfig : {navBoxClass : "cycle-nav", navActiveClass: "activeSlide" ,showNum : true} 
  17. }, 
  18. generateId : function(){ 
  19. return "-" + new Date().getTime(); 
  20. }, 
  21. generateTemplate : function(id,settings){ 
  22. var htmls = new Array(); 
  23. htmls.push('<div class="slider-wrap">'); 
  24. htmls.push('<div class="cycleslider-wrap">'); 
  25. htmls.push('<div id="beauty-slider' + id + '" class="cycleslider"></div>'); 
  26. if(settings.isArrow) { 
  27. htmls.push('<a id="cycle-prev' + id + '" class="cycle-prev" href="javascript:;" title="试试左方向键翻页">Prev</a>'); 
  28. htmls.push('<a id="cycle-next' + id + '" class="cycle-next" href="javascript:;" title="试试右方向键翻页">Next</a>'); 
  29. } 
  30. if(settings.showTimeLine) { 
  31. htmls.push('<div class="timeLine" id="timeLine' + id + '">'); 
  32. htmls.push('<div class="innerTimeLine" id="inner-timeLine' + id + '" style="width:0px;"></div>'); 
  33. htmls.push('<div id="timeLine-node' + id + '"></div>'); 
  34. htmls.push('</div>'); 
  35. } 
  36. if(settings.isNav) { 
  37. htmls.push('<div id="cycle-nav' + id + '" class="cycle-nav"></div>'); 
  38. } 
  39. htmls.push('</div>'); 
  40. htmls.push('<div class="loader"></div>'); 
  41. htmls.push('</div>'); 
  42. return htmls; 
  43. }, 
  44. init : function(dom, options) { 
  45. var s = this; 
  46. 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}; 
  47. var settings = $.extend({},defaults, options); 
  48. var id = s.generateId(); 
  49. $(".slider-wrap .loader").show(); 
  50. var imgArray = s.returnImgArray(dom, settings); 
  51. if (imgArray != null && imgArray.length > 0) { 
  52. s["imgcnt" + id] = imgArray.length; 
  53. $(dom).html(s.generateTemplate(id,settings).join('')).show(); 
  54. var slider = $(s.o.slider + id); 
  55. var pager = $(s.o.pager + id); 
  56. var timeLineNode = $(s.o.timeLineNode + id); 
  57. s.o.innerW = $(dom).width() - 20; 
  58. var imgHtml = ""; 
  59. var pageHtml = ""; 
  60. var timeHtml = ""; 
  61. $.each(imgArray,function(index,item){ 
  62. var picClass = index == 0 ? s.o.sliderItemClass : s.o.sliderItemClass + " none"; 
  63. var navClass = index == 0 ? settings.navConfig.navActiveClass : ""; 
  64. 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>'; 
  65. pageHtml += s.o.navHtml.replace("?", settings.navConfig.showNum ? index + 1 : "").replace("&", navClass); 
  66. var left = s.o.innerW * index / s["imgcnt" + id] - 13; 
  67. var nodeClass = index == 0 ? s.o.nodeActive : ""; 
  68. timeHtml +='<div class="node ' + nodeClass + '" style="left: ' + left + 'px;">'; 
  69. if(settings.showTip) { 
  70. timeHtml +='<div class="tooltip">' + item.title + '</div>'; 
  71. } 
  72. timeHtml +='</div>'; 
  73. }); 
  74. slider.html(imgHtml); 
  75. if(settings.isNav) { 
  76. if(settings.navConfig.navBoxClass) { 
  77. pager.removeClass(s.o.navConfig.navBoxClass).addClass(settings.navConfig.navBoxClass); 
  78. } 
  79. pager.html(pageHtml); 
  80. } 
  81. if(settings.showTimeLine) { 
  82. timeLineNode.html(timeHtml); 
  83. } 
  84. slider.width(s.o.innerW); 
  85. slider.find("." + s.o.sliderItemClass).width(s.o.innerW); 
  86. $(s.o.timeLine + id).width(s.o.innerW); 
  87. if(settings.overLay) { 
  88. if($.fn.layerModel) { 
  89. $(dom).layerModel({staySame : true, blurClose : true}); 
  90. } else { 
  91. alert("请先引入layerModel插件!"); 
  92. } 
  93. } 
  94. s.initBind(id, settings); 
  95. s["currentIndex" + id] = 0; 
  96. var totalTime = settings.time / 1000 * s["imgcnt" + id]; 
  97. if(settings.auto) { 
  98. if(settings.showTimeLine) { 
  99. s.startTimeLine(id , totalTime,settings); 
  100. } else { 
  101. s.o.timeInterval = window.setInterval(function(){ 
  102. $("#cycle-next" + id).click(); 
  103. }, settings.time); 
  104. } 
  105. } 
  106. } else { 
  107. return; 
  108. } 
  109. return dom; 
  110. }, 
  111. startTimeLine : function(id ,time, settings) { 
  112. var s = this; 
  113. var $innerTimeLine = $(s.o.innerTimeLine + id); 
  114. var crnW = $innerTimeLine.width(); 
  115. for (var i = 0; i < s["imgcnt" + id]; i++) { 
  116. var autoW = Math.floor(s.o.innerW * i / s["imgcnt" + id]); 
  117. if(crnW == autoW) { 
  118. s["currentIndex" + id] = i; 
  119. s.updateImgLink(id, settings); 
  120. $(s.o.timeLineNode + id).find("div.node").eq(i).addClass(s.o.nodeActive).siblings().removeClass(s.o.nodeActive); 
  121. } 
  122. } 
  123. if(crnW < s.o.innerW) { 
  124. $innerTimeLine.animate({width : "+=1px"}, time , 'linear', function(){ 
  125. s.startTimeLine(id, time, settings); 
  126. }); 
  127. } else { 
  128. $innerTimeLine.width(0); 
  129. s.startTimeLine(id, time, settings); 
  130. } 
  131. }, 
  132. initBind :function(id, settings) { 
  133. var s = this; 
  134. var isEasing = $.easing.def; 
  135. if(settings.isArrow) { 
  136. $("#cycle-prev" + id + ", #cycle-next" + id).css({opacity: "0"}); 
  137. $(".cycleslider-wrap").hover(function(){ 
  138. $("#cycle-prev" + id).stop().animate({left: "-31", opacity: "1"},200,isEasing ? "easeOutCubic" : ""); 
  139. $("#cycle-next" + id).stop().animate({right: "-31", opacity: "1"},200,isEasing ?"easeOutCubic" : "");  
  140. }, function() { 
  141. $("#cycle-prev" + id).stop().animate({left: "-50", opacity: "0"},400,isEasing ?"easeInCubic" : ""); 
  142. $("#cycle-next" + id).stop().animate({right: "-50", opacity: "0"},400,isEasing ?"easeInCubic" : "");  
  143. }); 
  144. $("#cycle-prev" + id).bind("click",function(){ 
  145. s["currentIndex" + id] = s["currentIndex" + id] <= 0 ? s["imgcnt" + id] - 1 : s["currentIndex" + id] - 1; 
  146. s.updateImgLink(id,settings); 
  147. }); 
  148. $("#cycle-next" + id).bind("click",function(){ 
  149. s["currentIndex" + id] = s["currentIndex" + id] < s["imgcnt" + id] - 1 ? s["currentIndex" + id] + 1 : 0; 
  150. s.updateImgLink(id,settings); 
  151. }); 
  152. } 
  153. $(".slider-wrap .loader").hide(); 
  154. $("a",s.o.pager + id).bind("click",function(){ 
  155. if ($(this).hasClass(s.o.navConfig.navActiveClass)){ 
  156. return false; 
  157. } 
  158. s["currentIndex" + id] = $(this).index(); 
  159. s.updateImgLink(id,settings); 
  160. }); 
  161.  
  162. if(settings.auto && settings.showTimeLine) { 
  163. $("div.node",s.o.timeLineNode + id).bind({ 
  164. click : function(){ 
  165. if($(this).hasClass(s.o.nodeActive)){ 
  166. return false; 
  167. } 
  168. s["currentIndex" + id] = $(this).index(); 
  169. s.updateImgLink(id,settings); 
  170. }, 
  171. mouseover : function(){ 
  172. if(settings.showTip) { 
  173. $(this).find(".tooltip").fadeIn(); 
  174. } 
  175. }, 
  176. mouseout : function(){ 
  177. if(settings.showTip) { 
  178. $(this).find(".tooltip").fadeOut(); 
  179. } 
  180. } 
  181. }); 
  182. } 
  183. // 键盘操作 
  184. if(settings.keyboard){ 
  185. $(window).keydown(function(event){ 
  186. //<--- 
  187. if(event.keyCode == 37){ 
  188. $("#cycle-prev" + id).click(); 
  189. } 
  190. //---> 
  191. if(event.keyCode == 39){ 
  192. $("#cycle-next" + id).click(); 
  193. } 
  194. }); 
  195. } 
  196. }, 
  197. updateImgLink : function(id, settings){ 
  198. var s = this; 
  199. var index = s["currentIndex" + id]; 
  200. var display = settings.display; 
  201. var isEasing = $.easing.def; 
  202. var $items = $("div." + s.o.sliderItemClass,s.o.slider + id); 
  203. switch (display) { 
  204. case s.o.displays.fade : 
  205. $items.eq(index).show().siblings().hide(); 
  206. break; 
  207. case s.o.displays.left : 
  208. $items.css({ position : "absolute", top : 0, left : s.o.innerW }).hide(); 
  209. $items.eq(index).animate({ left : 0 }, 100, isEasing ? "easeOutCubic" : "").show(); 
  210. $(s.o.slider + id).height(s.getImgMaxHeight(id)); 
  211. break; 
  212. case s.o.displays.right : 
  213. $items.css({ position : "absolute", top : 0, right : s.o.innerW }).hide(); 
  214. $items.eq(index).animate({ right : 0 }, 100, isEasing ? "easeOutCubic" : "").show(); 
  215. $(s.o.slider + id).height(s.getImgMaxHeight(id)); 
  216. break; 
  217. case s.o.displays.top : 
  218. break; 
  219. case s.o.displays.bottom :  
  220. break; 
  221. default : 
  222. break; 
  223. } 
  224. $("a",s.o.pager + id).eq(index).addClass(settings.navConfig.navActiveClass).siblings().removeClass(settings.navConfig.navActiveClass); 
  225. // 更新进度条的信息 
  226. if(settings.auto && settings.showTimeLine) { 
  227. var indexWidth = Math.floor(s.o.innerW * index / s["imgcnt" + id]); 
  228. $(s.o.innerTimeLine + id).animate({width : indexWidth +"px"}, 500 , 'linear', function(){ 
  229. $(s.o.timeLineNode + id).find("div.node").eq(index).addClass(s.o.nodeActive).siblings().removeClass(s.o.nodeActive); 
  230. }); 
  231. } 
  232. }, 
  233. getImgMaxHeight : function(id) { 
  234. var s = this; 
  235. var slider = $(s.o.slider + id); 
  236. var maxHeight = 0; 
  237. $.each(slider.find("img"),function(index,item){ 
  238. var imgHeight = this.height; 
  239. maxHeight = Math.max(maxHeight,imgHeight); 
  240. }); 
  241. return maxHeight; 
  242. }, 
  243. returnImgArray : function(dom,settings){ 
  244. var s = this; 
  245. var imgArray = new Array(); 
  246. var url = settings.url; 
  247. if (s.isParamValid(url)) { 
  248. $.ajax({ 
  249. url : url + "?t=" + new Date().getTime(), 
  250. type : 'POST', 
  251. async : false, 
  252. data : settings.data, 
  253. dataType : 'json', 
  254. success : function(data) { 
  255. if (s.isParamValid(data)) { 
  256. $.each(data, function(index, item) { 
  257. imgArray.push(item); 
  258. }); 
  259. } 
  260. }, 
  261. error : function() { 
  262. alert("图片数据源地址无效..."); 
  263. return null; 
  264. }, 
  265. complete : function(XHR, TS) { XHR = null; } 
  266. }); 
  267. } else { 
  268. var imgs = $(dom).find("img"); 
  269. if (imgs != null && imgs.length > 0) { 
  270. $.each(imgs,function(i,o){ 
  271. var pic = new Object(); 
  272. pic.picUrl = $(o).parent("a").attr("href"); 
  273. pic.picPath = $(o).attr("src"); 
  274. pic.width = $(o).attr("width"); 
  275. pic.height = $(o).attr("height"); 
  276. pic.title = $(o).attr("title"); 
  277. imgArray.push(pic); 
  278. }); 
  279. } 
  280. } 
  281. return imgArray; 
  282. }, 
  283. isParamValid : function(v) { 
  284. return !(v == "" || v == null || v == undefined); 
  285. } 
  286. }; 
  287. $.fn.beautyFocus = function(options) { 
  288. return this.each(function(index,item) { 
  289. methods.init(item, options);  
  290. }); 
  291. }; 
  292. })(jQuery); 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选