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

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

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

图片精选