前言

  前几天加班比较忙 未能及时更新翻译的 今天多发布几篇。。下载该插件翻译源码

Accordion 分类空间允许用户使用多面板,但在同一时间只会显示一个。每个面板都内建支持展开和折叠功能。点击一个面板的标题将会展开或折叠面板主体。面板内容可以通过指定的'href'属性使用ajax方式读取面板内容。用户可以定义一个被默认选中的面板,如果未指定,那么第一个面板就是默认的

源码

  1. /**
  2. * jQuery EasyUI 1.3.2
  3. *
  4. *翻译:lbq
  5. */
  6. (function ($) {
  7. //调整大小
  8. function _resize(target) {
  9. var options = $.data(target, "accordion").options;
  10. var panels = $.data(target, "accordion").panels;
  11. var cc = $(target);
  12. //自适应
  13. options.fit ? $.extend(options, cc._fit()) : cc._fit(false);
  14. if (options.width > 0) {
  15. cc._outerWidth(options.width);
  16. }
  17. var height = "auto";
  18. if (options.height > 0) {
  19. cc._outerHeight(options.height);
  20. var h = panels.length ? panels[0].panel("header").css("height", "")._outerHeight() : "auto";
  21. var height = cc.height() - (panels.length - 1) * h;
  22. }
  23. for (var i = 0; i < panels.length; i++) {
  24. var panel = panels[i];
  25. var header = panel.panel("header");
  26. header._outerHeight(h);
  27. panel.panel("resize", { width: cc.width(), height: height });
  28. }
  29. };
  30. //获取被选中的Panel
  31. function _getSelected(target) {
  32. var panels = $.data(target, "accordion").panels;
  33. for (var i = 0; i < panels.length; i++) {
  34. var panel = panels[i];
  35. if (panel.panel("options").collapsed == false) {
  36. return panel;
  37. }
  38. }
  39. return null;
  40. };
  41.  
  42. //获取指定面板的索引
  43. function _getPanelIndex(target, panel) {
  44. var panels = $.data(target, "accordion").panels;
  45. for (var i = 0; i < panels.length; i++) {
  46. if (panels[i][0] == $(panel)[0]) {
  47. return i;
  48. }
  49. }
  50. return -1;
  51. };
  52. //获取指定的面板,'which'参数可以是面板的标题或者索引
  53. function _getPanel(target, title, isDelete) {
  54. var panels = $.data(target, "accordion").panels;
  55. if (typeof title == "number") {
  56. if (title < 0 || title >= panels.length) {
  57. return null;
  58. } else {
  59. var panel = panels[title];
  60. if (isDelete) {
  61. panels.splice(title, 1);
  62. }
  63. return panel;
  64. }
  65. }
  66. for (var i = 0; i < panels.length; i++) {
  67. var panel = panels[i];
  68. if (panel.panel("options").title == title) {
  69. if (isDelete) {
  70. panels.splice(i, 1);
  71. }
  72. return panel;
  73. }
  74. }
  75. return null;
  76. };
  77.  
  78. //设置边框
  79. function setnoBorder(target) {
  80. var opts = $.data(target, "accordion").options;
  81. var cc = $(target);
  82. if (opts.border) {
  83. cc.removeClass("accordion-noborder");
  84. } else {
  85. cc.addClass("accordion-noborder");
  86. }
  87. };
  88. //渲染折叠面板
  89. function renderAccordion(target) {
  90. var cc = $(target);
  91. cc.addClass("accordion");
  92. var panels = [];
  93. cc.children("div").each(function () {
  94. var options = $.extend({}, $.parser.parseOptions(this), { selected: ($(this).attr("selected") ? true : undefined) });
  95. var pp = $(this);
  96. panels.push(pp);
  97. createNewPanel(target, pp, options);//创建新增的Panel
  98. });
  99. cc.bind("_resize", function (e, _1e) {
  100. var opts = $.data(target, "accordion").options;
  101. if (opts.fit == true || _1e) {
  102. _resize(target);
  103. }
  104. return false;
  105. });
  106. return { accordion: cc, panels: panels };
  107. };
  108. // 创建新增的Panel--面板属性事件
  109. function createNewPanel(jq, pp, options) {
  110. pp.panel($.extend({}, options, {
  111. collapsible: false,
  112. minimizable: false,
  113. maximizable: false,
  114. closable: false,
  115. doSize: false,
  116. collapsed: true,
  117. headerCls: "accordion-header",
  118. bodyCls: "accordion-body",
  119. onBeforeExpand: function () {
  120. var selectedPanel = _getSelected(jq);//获取展开前被选中的panel
  121. if (selectedPanel) {
  122. var header = $(selectedPanel).panel("header");
  123. header.removeClass("accordion-header-selected");//把展开前被选中的panel的选中样式设置为未选中
  124. header.find(".accordion-collapse").triggerHandler("click");//把展开前被选中的panel合上
  125. }
  126. var header = pp.panel("header");
  127. header.addClass("accordion-header-selected");//样式设置为已选中
  128. header.find(".accordion-collapse").removeClass("accordion-expand");//样式设置为已展开
  129. },
  130. onExpand: function () {
  131. var options = $.data(jq, "accordion").options;
  132. options.onSelect.call(jq, pp.panel("options").title, _getPanelIndex(jq, this));//返回选择的panle的title给onSelect事件作为参数,并响应事件
  133. },
  134. onBeforeCollapse: function () {
  135. var header = pp.panel("header");
  136. header.removeClass("accordion-header-selected");//去掉选中样式
  137. header.find(".accordion-collapse").addClass("accordion-expand");//样式设置为未展开
  138. }
  139. }));
  140. var header = pp.panel("header");
  141. var t = $("<a class=\"accordion-collapse accordion-expand\" href=\"javascript:void(0)\"></a>").appendTo(header.children("div.panel-tool"));
  142.  
  143. t.bind("click", function (e) {
  144. var animate = $.data(jq, "accordion").options.animate;
  145. stopAll(jq);
  146. if (pp.panel("options").collapsed) {
  147. pp.panel("expand", animate);
  148. } else {
  149. pp.panel("collapse", animate);
  150. }
  151. return false;
  152. });
  153. header.click(function () {
  154. $(this).find(".accordion-collapse").triggerHandler("click");
  155. return false;
  156. });
  157. };
  158. //选择指定面板。'which'参数可以是面板标题或者索引
  159. function _select(jq, title) {
  160. var panel = _getPanel(jq, title);
  161. if (!panel) {
  162. return;
  163. }
  164. var selectedPanel = _getSelected(jq);
  165. if (selectedPanel && selectedPanel[0] == panel[0]) {
  166. return;
  167. }
  168. panel.panel("header").triggerHandler("click");
  169. };
  170.  
  171. function setanimate(target) {
  172.  
  173. var panels = $.data(target, "accordion").panels;
  174. for (var i = 0; i < panels.length; i++) {
  175. if (panels[i].panel("options").selected) {
  176. _31(i);
  177. return;
  178. }
  179. }
  180. if (panels.length) {
  181. _31(0);
  182. }
  183. function _31(index) {
  184.  
  185. var opts = $.data(target, "accordion").options;
  186. var animate = opts.animate;
  187. opts.animate = false;
  188. _select(target, index);
  189. console.info(animate);
  190. opts.animate = animate;
  191. };
  192. };
  193. //停止折叠面板所有正在运行的动画
  194. function stopAll(target) {
  195. var panel = $.data(target, "accordion").panels;
  196. for (var i = 0; i < panel.length; i++) {
  197. panel[i].stop(true, true);
  198. }
  199. };
  200. //添加一个新面板。在默认情况下,新增的面板会变成当前面板。如果要添加一个非选中面板,不要忘记将'selected'属性设置为false
  201. function add(target, options) {
  202. var opts = $.data(target, "accordion").options;
  203. var panels = $.data(target, "accordion").panels;
  204. if (options.selected == undefined) {
  205. options.selected = true;
  206. }
  207. stopAll(target);
  208. var pp = $("<div></div>").appendTo(target);
  209. panels.push(pp);
  210. createNewPanel(target, pp, options);
  211. _resize(target);
  212. opts.onAdd.call(target, options.title, panels.length - 1);
  213. if (options.selected) {
  214. _select(target, panels.length - 1);
  215. }
  216. };
  217. //移除指定面板。'which'参数可以使面板的标题或者索引
  218. function _remove(target, title) {
  219. var opts = $.data(target, "accordion").options;
  220. var panels = $.data(target, "accordion").panels;
  221. stopAll(target);
  222.  
  223. var panel = _getPanel(target, title);
  224. var title = panel.panel("options").title;
  225. var index = _getPanelIndex(target, panel);
  226. //删除前判断onBeforeRemove的返回结果
  227. if (opts.onBeforeRemove.call(target, title, index) == false) {
  228. return;
  229. }
  230. var panel = _getPanel(target, title, true);
  231. if (panel) {
  232. panel.panel("destroy");
  233. if (panels.length) {
  234. _resize(target);
  235. var selectedPanel = _getSelected(target);
  236. if (!selectedPanel) {
  237. _select(target, 0);
  238. }
  239. }
  240. }
  241. opts.onRemove.call(target, title, index);
  242. };
  243. //创建手风琴
  244. $.fn.accordion = function (options, param) {
  245. if (typeof options == "string") {
  246. return $.fn.accordion.methods[options](this, param);
  247. }
  248. options = options || {};
  249. return this.each(function () {
  250. var accordion = $.data(this, "accordion");
  251. var opts;
  252. if (accordion) {
  253. opts = $.extend(accordion.options, options);
  254. accordion.opts = opts;
  255. } else {
  256. opts = $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), options);
  257. var r = renderAccordion(this);//渲染折叠面板
  258. $.data(this, "accordion", { options: opts, accordion: r.accordion, panels: r.panels });
  259. }
  260. setnoBorder(this);
  261. _resize(this);
  262. setanimate(this);
  263. });
  264. };
  265. //手风琴方法
  266. $.fn.accordion.methods = {
  267. //返回分类组件的属性
  268. options: function (jq) {
  269. return $.data(jq[0], "accordion").options;
  270. },
  271. //获取所有面板
  272. panels: function (jq) {
  273. return $.data(jq[0], "accordion").panels;
  274. },
  275. //调整分类组件大小
  276. resize: function (jq) {
  277. return jq.each(function () {
  278. _resize(this);
  279. });
  280. },
  281. //获取选中的面板
  282. getSelected: function (jq) {
  283. return _getSelected(jq[0]);
  284. },
  285. //获取指定的面板,'which'参数可以是面板的标题或者索引
  286. getPanel: function (jq, which) {
  287. return _getPanel(jq[0], which);
  288. },
  289. //获取指定面板的索引
  290. getPanelIndex: function (jq, panel) {
  291. return _getPanelIndex(jq[0], panel);
  292. },
  293. //选择指定面板。'which'参数可以是面板标题或者索引
  294. select: function (jq, which) {
  295. return jq.each(function () {
  296. _select(this, which);
  297. });
  298. },
  299. //添加一个新面板。在默认情况下,新增的面板会变成当前面板。如果要添加一个非选中面板,不要忘记将'selected'属性设置为false
  300. add: function (jq, options) {
  301. return jq.each(function () {
  302. add(this, options);
  303. });
  304. },
  305. //移除指定面板。'which'参数可以使面板的标题或者索引
  306. remove: function (jq, which) {
  307. return jq.each(function () {
  308. _remove(this, which);
  309. });
  310. }
  311. };
  312. //解析器
  313. $.fn.accordion.parseOptions = function (target) {
  314. var t = $(target);
  315. return $.extend({}, $.parser.parseOptions(target, ["width", "height", { fit: "boolean", border: "boolean", animate: "boolean" }]));
  316. };
  317. //手风琴默认属性、事件
  318. $.fn.accordion.defaults = {
  319. width: "auto",//分类容器的宽度
  320. height: "auto",//高度
  321. fit: false,//如果设置为true,分类容器大小将自适应父容器
  322. border: true,//定义是否显示边框
  323. animate: true,//定义在展开和折叠的时候是否显示动画效果
  324. //在面板被选中的时候触发
  325. onSelect: function (title, index) {
  326. },
  327. //在添加新面板的时候触发
  328. onAdd: function (title, index) {
  329. },
  330. //在移除面板之前触发,返回false可以取消移除操作
  331. onBeforeRemove: function (title, index) {
  332. },
  333. //在面板被移除的时候触发
  334. onRemove: function (title, index) {
  335. }
  336. };
  337. })(jQuery);

示例代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Basic Accordion - jQuery EasyUI Demo</title>
  6. <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
  8. <link rel="stylesheet" type="text/css" href="../demo.css">
  9. <script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
  10. <script src="../../plugins2/jquery.parser.js"></script>
  11. <script src="../../plugins2/jquery.panel.js"></script>
  12. <script src="../../plugins2/jquery.accordion.js"></script>
  13. </head>
  14. <body>
  15. <h2>Basic Accordion</h2>
  16. <div class="demo-info">
  17. <div class="demo-tip icon-tip"></div>
  18. <div>Click on panel header to show its content.</div>
  19. </div>
  20. <div style="margin:10px 0;"></div>
  21. <div class="easyui-accordion" style="width:500px;height:300px;">
  22. <div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
  23. <h3 style="color:#0099FF;">Accordion for jQuery</h3>
  24. <p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
  25. </div>
  26. <div title="Help" data-options="iconCls:'icon-help'" style="padding:10px;">
  27. <p>The accordion allows you to provide multiple panels and display one at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p>
  28. </div>
  29. <div title="TreeMenu" data-options="iconCls:'icon-search'" style="padding:10px;">
  30. <ul class="easyui-tree">
  31. <li>
  32. <span>Foods</span>
  33. <ul>
  34. <li>
  35. <span>Fruits</span>
  36. <ul>
  37. <li>apple</li>
  38. <li>orange</li>
  39. </ul>
  40. </li>
  41. <li>
  42. <span>Vegetables</span>
  43. <ul>
  44. <li>tomato</li>
  45. <li>carrot</li>
  46. <li>cabbage</li>
  47. <li>potato</li>
  48. <li>lettuce</li>
  49. </ul>
  50. </li>
  51. </ul>
  52. </li>
  53. </ul>
  54. </div>
  55. </div>
  56. </body>
  57. </html>

插件效果

easyui源码翻译1.32--accordion(手风琴)的更多相关文章

  1. easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)

    前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...

  2. easyui源码翻译1.32--datagrid(数据表格)

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

  3. easyui源码翻译1.32--EasyLoader(简单加载)

    前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3. ...

  4. easyui源码翻译1.32--panel(面板)

    前言 昨天发布了表格datagrid的翻译源码 ,easyui的许多插件有依赖关系  比如datagrid 的渲染需要panel.resizable.linkbutton.pagination   今 ...

  5. easyui源码翻译1.32--Draggable(拖动)

    前言 使用$.fn.draggable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 --拖动 ...

  6. easyui源码翻译1.32--Droppable(放置)

    前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...

  7. easyui源码翻译1.32--Resizable(调整大小)

    前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 Resiz ...

  8. easyui源码翻译1.32--Pagination(分页)

    前言 使用$.fn.pagination.defaults重写默认值对象下载该插件翻译源码 该分页控件允许用户导航页面的数据.它支持页面导航和页面长度选择的选项设置.用户可以在分页控件上添加自定义按钮 ...

  9. easyui源码翻译1.32--SearchBox(搜索框)

    前言 使用$.fn.searchbox.defaults重写默认值对象.下载该插件翻译源码 搜索框提示用户需要输入搜索的值.它可以结合一个菜单,允许用户选择不同的搜索类别.在用户按下回车键或点击组件右 ...

随机推荐

  1. ASP实现用年月日时分秒和两位随机数字来作为上传文件名的函数

    Public Function GetNewFileName() dim ranNum dim dtNow dtNow=Now() randomize ranNum=int(90*rnd)+10 Ge ...

  2. 使用PHP连接、操纵Memcached的原理和教程

    http://www.crazyant.net/1014.html Memcahced开源分布式内存对象缓存系统通过减少数据库的负担,从而能够加速你的web应用.在本文中我将解释怎样实现一个基于Mem ...

  3. CPrintDialog

    CPrintDialog 封装windows为打印提供服务的通用窗体. BOOL GetDefaults(); //获取默认设备,不显示对话框 // Helpers for parsing infor ...

  4. 初尝Windows 下批处理编程

    本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...

  5. Java线程间通信--生产者消费者

    class ProducerConsumerDemo {    public static void main(String[] args)     {        Resource r = new ...

  6. 虚拟机单一网卡设置两个IP

    一.在虚拟机里修改虚拟网卡配置 cd /ect/sysconfig/network-scripts/ vi ifcfg-eth0 改BOOTPROTO=static cp ifcfg-eth0 ifc ...

  7. 第48条:如果需要精确的答案,请避免使用float和double

    float和double主要为了科学计算和工程计算而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不适合用于需要精确 ...

  8. TreeMap 红黑树实现

    TreeMap 是一个有序的key-value集合,它是通过 红黑树 实现的. TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合. TreeMap 实现了 ...

  9. 【原】.Net之美学习笔记-第1章-1.1.1值类型

    结构还有一个特性:调用结构上的方法前,需要对其所有的字段进行赋值.

  10. 如何把jar包放到本地maven仓库中

    以前开发过程中也碰到过maven项目中需要引用其它jar包的情况,当时由于对maven还不熟悉,所以使用了在本地搭建nexus或者手动添加jar包的方法,两者都不是很方便. 如今因为淘宝的工作需要,又 ...