ligerAccordion.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /**
  2. * jQuery ligerUI 1.1.9
  3. *
  4. * http://ligerui.com
  5. *
  6. * Author daomi 2012 [ gd_star@163.com ]
  7. *
  8. */
  9. (function ($)
  10. {
  11. $.fn.ligerAccordion = function (options)
  12. {
  13. return $.ligerui.run.call(this, "ligerAccordion", arguments);
  14. };
  15. $.fn.ligerGetAccordionManager = function ()
  16. {
  17. return $.ligerui.get(this);
  18. };
  19. $.ligerDefaults.Accordion = {
  20. height: null,
  21. speed: "normal",
  22. changeHeightOnResize: false,
  23. heightDiff: 0 // 高度补差
  24. };
  25. $.ligerMethos.Accordion = {};
  26. $.ligerui.controls.Accordion = function (element, options)
  27. {
  28. $.ligerui.controls.Accordion.base.constructor.call(this, element, options);
  29. };
  30. $.ligerui.controls.Accordion.ligerExtend($.ligerui.core.UIComponent, {
  31. __getType: function ()
  32. {
  33. return 'Accordion';
  34. },
  35. __idPrev: function ()
  36. {
  37. return 'Accordion';
  38. },
  39. _extendMethods: function ()
  40. {
  41. return $.ligerMethos.Accordion;
  42. },
  43. _render: function ()
  44. {
  45. var g = this, p = this.options;
  46. g.accordion = $(g.element);
  47. if (!g.accordion.hasClass("l-accordion-panel")) g.accordion.addClass("l-accordion-panel");
  48. var selectedIndex = 0;
  49. if ($("> div[lselected=true]", g.accordion).length > 0)
  50. selectedIndex = $("> div", g.accordion).index($("> div[lselected=true]", g.accordion));
  51. $("> div", g.accordion).each(function (i, box)
  52. {
  53. var header = $('<div class="l-accordion-header"><div class="l-accordion-toggle"></div><div class="l-accordion-header-inner"></div></div>');
  54. if (i == selectedIndex)
  55. $(".l-accordion-toggle", header).addClass("l-accordion-toggle-open");
  56. if ($(box).attr("title"))
  57. {
  58. $(".l-accordion-header-inner", header).html($(box).attr("title"));
  59. $(box).attr("title", "");
  60. }
  61. $(box).before(header);
  62. if (!$(box).hasClass("l-accordion-content")) $(box).addClass("l-accordion-content");
  63. });
  64. //add Even
  65. $(".l-accordion-toggle", g.accordion).each(function ()
  66. {
  67. if (!$(this).hasClass("l-accordion-toggle-open") && !$(this).hasClass("l-accordion-toggle-close"))
  68. {
  69. $(this).addClass("l-accordion-toggle-close");
  70. }
  71. if ($(this).hasClass("l-accordion-toggle-close"))
  72. {
  73. $(this).parent().next(".l-accordion-content:visible").hide();
  74. }
  75. });
  76. $(".l-accordion-header", g.accordion).hover(function ()
  77. {
  78. $(this).addClass("l-accordion-header-over");
  79. }, function ()
  80. {
  81. $(this).removeClass("l-accordion-header-over");
  82. });
  83. $(".l-accordion-toggle", g.accordion).hover(function ()
  84. {
  85. if ($(this).hasClass("l-accordion-toggle-open"))
  86. $(this).addClass("l-accordion-toggle-open-over");
  87. else if ($(this).hasClass("l-accordion-toggle-close"))
  88. $(this).addClass("l-accordion-toggle-close-over");
  89. }, function ()
  90. {
  91. if ($(this).hasClass("l-accordion-toggle-open"))
  92. $(this).removeClass("l-accordion-toggle-open-over");
  93. else if ($(this).hasClass("l-accordion-toggle-close"))
  94. $(this).removeClass("l-accordion-toggle-close-over");
  95. });
  96. $(">.l-accordion-header", g.accordion).click(function ()
  97. {
  98. var togglebtn = $(".l-accordion-toggle:first", this);
  99. if (togglebtn.hasClass("l-accordion-toggle-close"))
  100. {
  101. togglebtn.removeClass("l-accordion-toggle-close")
  102. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  103. togglebtn.addClass("l-accordion-toggle-open");
  104. $(this).next(".l-accordion-content")
  105. .show(p.speed)
  106. .siblings(".l-accordion-content:visible").hide(p.speed);
  107. $(this).siblings(".l-accordion-header").find(".l-accordion-toggle").removeClass("l-accordion-toggle-open").addClass("l-accordion-toggle-close");
  108. }
  109. else
  110. {
  111. togglebtn.removeClass("l-accordion-toggle-open")
  112. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  113. .addClass("l-accordion-toggle-close");
  114. $(this).next(".l-accordion-content").hide(p.speed);
  115. }
  116. });
  117. //init
  118. g.headerHoldHeight = 0;
  119. $("> .l-accordion-header", g.accordion).each(function ()
  120. {
  121. g.headerHoldHeight += $(this).height();
  122. });
  123. if (p.height && typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  124. {
  125. g.onResize();
  126. if (p.changeHeightOnResize)
  127. {
  128. $(window).resize(function ()
  129. {
  130. g.onResize();
  131. });
  132. }
  133. }
  134. else
  135. {
  136. if (p.height)
  137. {
  138. g.height = p.heightDiff + p.height;
  139. g.accordion.height(g.height);
  140. g.setHeight(p.height);
  141. }
  142. else
  143. {
  144. g.header = g.accordion.height();
  145. }
  146. }
  147. g.set(p);
  148. },
  149. onResize: function ()
  150. {
  151. var g = this, p = this.options;
  152. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  153. //set accordion height
  154. if (g.accordion.parent()[0].tagName.toLowerCase() == "body")
  155. {
  156. var windowHeight = $(window).height();
  157. windowHeight -= parseInt(g.layout.parent().css('paddingTop'));
  158. windowHeight -= parseInt(g.layout.parent().css('paddingBottom'));
  159. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  160. }
  161. else
  162. {
  163. g.height = p.heightDiff + (g.accordion.parent().height() * parseFloat(p.height) * 0.01);
  164. }
  165. g.accordion.height(g.height);
  166. g.setContentHeight(g.height - g.headerHoldHeight);
  167. },
  168. setHeight: function (height)
  169. {
  170. var g = this, p = this.options;
  171. g.accordion.height(height);
  172. height -= g.headerHoldHeight;
  173. $("> .l-accordion-content", g.accordion).height(height);
  174. }
  175. });
  176. })(jQuery);