前言

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

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

源码

/**
* jQuery EasyUI 1.3.2
*
*翻译:lbq
*/
(function ($) {
//调整大小
function _resize(target) {
var options = $.data(target, "accordion").options;
var panels = $.data(target, "accordion").panels;
var cc = $(target);
//自适应
options.fit ? $.extend(options, cc._fit()) : cc._fit(false);
if (options.width > 0) {
cc._outerWidth(options.width);
}
var height = "auto";
if (options.height > 0) {
cc._outerHeight(options.height);
var h = panels.length ? panels[0].panel("header").css("height", "")._outerHeight() : "auto";
var height = cc.height() - (panels.length - 1) * h;
}
for (var i = 0; i < panels.length; i++) {
var panel = panels[i];
var header = panel.panel("header");
header._outerHeight(h);
panel.panel("resize", { width: cc.width(), height: height });
}
};
//获取被选中的Panel
function _getSelected(target) {
var panels = $.data(target, "accordion").panels;
for (var i = 0; i < panels.length; i++) {
var panel = panels[i];
if (panel.panel("options").collapsed == false) {
return panel;
}
}
return null;
}; //获取指定面板的索引
function _getPanelIndex(target, panel) {
var panels = $.data(target, "accordion").panels;
for (var i = 0; i < panels.length; i++) {
if (panels[i][0] == $(panel)[0]) {
return i;
}
}
return -1;
};
//获取指定的面板,'which'参数可以是面板的标题或者索引
function _getPanel(target, title, isDelete) {
var panels = $.data(target, "accordion").panels;
if (typeof title == "number") {
if (title < 0 || title >= panels.length) {
return null;
} else {
var panel = panels[title];
if (isDelete) {
panels.splice(title, 1);
}
return panel;
}
}
for (var i = 0; i < panels.length; i++) {
var panel = panels[i];
if (panel.panel("options").title == title) {
if (isDelete) {
panels.splice(i, 1);
}
return panel;
}
}
return null;
}; //设置边框
function setnoBorder(target) {
var opts = $.data(target, "accordion").options;
var cc = $(target);
if (opts.border) {
cc.removeClass("accordion-noborder");
} else {
cc.addClass("accordion-noborder");
}
};
//渲染折叠面板
function renderAccordion(target) {
var cc = $(target);
cc.addClass("accordion");
var panels = [];
cc.children("div").each(function () {
var options = $.extend({}, $.parser.parseOptions(this), { selected: ($(this).attr("selected") ? true : undefined) });
var pp = $(this);
panels.push(pp);
createNewPanel(target, pp, options);//创建新增的Panel
});
cc.bind("_resize", function (e, _1e) {
var opts = $.data(target, "accordion").options;
if (opts.fit == true || _1e) {
_resize(target);
}
return false;
});
return { accordion: cc, panels: panels };
};
// 创建新增的Panel--面板属性事件
function createNewPanel(jq, pp, options) {
pp.panel($.extend({}, options, {
collapsible: false,
minimizable: false,
maximizable: false,
closable: false,
doSize: false,
collapsed: true,
headerCls: "accordion-header",
bodyCls: "accordion-body",
onBeforeExpand: function () {
var selectedPanel = _getSelected(jq);//获取展开前被选中的panel
if (selectedPanel) {
var header = $(selectedPanel).panel("header");
header.removeClass("accordion-header-selected");//把展开前被选中的panel的选中样式设置为未选中
header.find(".accordion-collapse").triggerHandler("click");//把展开前被选中的panel合上
}
var header = pp.panel("header");
header.addClass("accordion-header-selected");//样式设置为已选中
header.find(".accordion-collapse").removeClass("accordion-expand");//样式设置为已展开
},
onExpand: function () {
var options = $.data(jq, "accordion").options;
options.onSelect.call(jq, pp.panel("options").title, _getPanelIndex(jq, this));//返回选择的panle的title给onSelect事件作为参数,并响应事件
},
onBeforeCollapse: function () {
var header = pp.panel("header");
header.removeClass("accordion-header-selected");//去掉选中样式
header.find(".accordion-collapse").addClass("accordion-expand");//样式设置为未展开
}
}));
var header = pp.panel("header");
var t = $("<a class=\"accordion-collapse accordion-expand\" href=\"javascript:void(0)\"></a>").appendTo(header.children("div.panel-tool")); t.bind("click", function (e) {
var animate = $.data(jq, "accordion").options.animate;
stopAll(jq);
if (pp.panel("options").collapsed) {
pp.panel("expand", animate);
} else {
pp.panel("collapse", animate);
}
return false;
});
header.click(function () {
$(this).find(".accordion-collapse").triggerHandler("click");
return false;
});
};
//选择指定面板。'which'参数可以是面板标题或者索引
function _select(jq, title) {
var panel = _getPanel(jq, title);
if (!panel) {
return;
}
var selectedPanel = _getSelected(jq);
if (selectedPanel && selectedPanel[0] == panel[0]) {
return;
}
panel.panel("header").triggerHandler("click");
}; function setanimate(target) { var panels = $.data(target, "accordion").panels;
for (var i = 0; i < panels.length; i++) {
if (panels[i].panel("options").selected) {
_31(i);
return;
}
}
if (panels.length) {
_31(0);
}
function _31(index) { var opts = $.data(target, "accordion").options;
var animate = opts.animate;
opts.animate = false;
_select(target, index);
console.info(animate);
opts.animate = animate;
};
};
//停止折叠面板所有正在运行的动画
function stopAll(target) {
var panel = $.data(target, "accordion").panels;
for (var i = 0; i < panel.length; i++) {
panel[i].stop(true, true);
}
};
//添加一个新面板。在默认情况下,新增的面板会变成当前面板。如果要添加一个非选中面板,不要忘记将'selected'属性设置为false
function add(target, options) {
var opts = $.data(target, "accordion").options;
var panels = $.data(target, "accordion").panels;
if (options.selected == undefined) {
options.selected = true;
}
stopAll(target);
var pp = $("<div></div>").appendTo(target);
panels.push(pp);
createNewPanel(target, pp, options);
_resize(target);
opts.onAdd.call(target, options.title, panels.length - 1);
if (options.selected) {
_select(target, panels.length - 1);
}
};
//移除指定面板。'which'参数可以使面板的标题或者索引
function _remove(target, title) {
var opts = $.data(target, "accordion").options;
var panels = $.data(target, "accordion").panels;
stopAll(target); var panel = _getPanel(target, title);
var title = panel.panel("options").title;
var index = _getPanelIndex(target, panel);
//删除前判断onBeforeRemove的返回结果
if (opts.onBeforeRemove.call(target, title, index) == false) {
return;
}
var panel = _getPanel(target, title, true);
if (panel) {
panel.panel("destroy");
if (panels.length) {
_resize(target);
var selectedPanel = _getSelected(target);
if (!selectedPanel) {
_select(target, 0);
}
}
}
opts.onRemove.call(target, title, index);
};
//创建手风琴
$.fn.accordion = function (options, param) {
if (typeof options == "string") {
return $.fn.accordion.methods[options](this, param);
}
options = options || {};
return this.each(function () {
var accordion = $.data(this, "accordion");
var opts;
if (accordion) {
opts = $.extend(accordion.options, options);
accordion.opts = opts;
} else {
opts = $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), options);
var r = renderAccordion(this);//渲染折叠面板
$.data(this, "accordion", { options: opts, accordion: r.accordion, panels: r.panels });
}
setnoBorder(this);
_resize(this);
setanimate(this);
});
};
//手风琴方法
$.fn.accordion.methods = {
//返回分类组件的属性
options: function (jq) {
return $.data(jq[0], "accordion").options;
},
//获取所有面板
panels: function (jq) {
return $.data(jq[0], "accordion").panels;
},
//调整分类组件大小
resize: function (jq) {
return jq.each(function () {
_resize(this);
});
},
//获取选中的面板
getSelected: function (jq) {
return _getSelected(jq[0]);
},
//获取指定的面板,'which'参数可以是面板的标题或者索引
getPanel: function (jq, which) {
return _getPanel(jq[0], which);
},
//获取指定面板的索引
getPanelIndex: function (jq, panel) {
return _getPanelIndex(jq[0], panel);
},
//选择指定面板。'which'参数可以是面板标题或者索引
select: function (jq, which) {
return jq.each(function () {
_select(this, which);
});
},
//添加一个新面板。在默认情况下,新增的面板会变成当前面板。如果要添加一个非选中面板,不要忘记将'selected'属性设置为false
add: function (jq, options) {
return jq.each(function () {
add(this, options);
});
},
//移除指定面板。'which'参数可以使面板的标题或者索引
remove: function (jq, which) {
return jq.each(function () {
_remove(this, which);
});
}
};
//解析器
$.fn.accordion.parseOptions = function (target) {
var t = $(target);
return $.extend({}, $.parser.parseOptions(target, ["width", "height", { fit: "boolean", border: "boolean", animate: "boolean" }]));
};
//手风琴默认属性、事件
$.fn.accordion.defaults = {
width: "auto",//分类容器的宽度
height: "auto",//高度
fit: false,//如果设置为true,分类容器大小将自适应父容器
border: true,//定义是否显示边框
animate: true,//定义在展开和折叠的时候是否显示动画效果
//在面板被选中的时候触发
onSelect: function (title, index) {
},
//在添加新面板的时候触发
onAdd: function (title, index) {
},
//在移除面板之前触发,返回false可以取消移除操作
onBeforeRemove: function (title, index) {
},
//在面板被移除的时候触发
onRemove: function (title, index) {
}
};
})(jQuery);

示例代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic Accordion - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
<script src="../../plugins2/jquery.parser.js"></script>
<script src="../../plugins2/jquery.panel.js"></script>
<script src="../../plugins2/jquery.accordion.js"></script>
</head>
<body>
<h2>Basic Accordion</h2>
<div class="demo-info">
<div class="demo-tip icon-tip"></div>
<div>Click on panel header to show its content.</div>
</div>
<div style="margin:10px 0;"></div>
<div class="easyui-accordion" style="width:500px;height:300px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
<div title="Help" data-options="iconCls:'icon-help'" style="padding:10px;">
<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>
</div>
<div title="TreeMenu" data-options="iconCls:'icon-search'" style="padding:10px;">
<ul class="easyui-tree">
<li>
<span>Foods</span>
<ul>
<li>
<span>Fruits</span>
<ul>
<li>apple</li>
<li>orange</li>
</ul>
</li>
<li>
<span>Vegetables</span>
<ul>
<li>tomato</li>
<li>carrot</li>
<li>cabbage</li>
<li>potato</li>
<li>lettuce</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</body>
</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. C#中的事件-订阅与发布

    我们用一个简单的例子,来说明一下这种消息传递的机制. 有一家三口,妈妈负责做饭,爸爸和孩子负责吃...将这三个人,想象成三个类. 妈妈有一个方法,叫做“做饭”.有一个事件,叫做“开饭”.做完饭后,调用 ...

  2. FCKEditor的用法与下载

    以下是我初次使用FCKEditor的方法,都是来自网上,但网上都不完整,现在我整理下: 1:下载FCKEditor 下载下来后解压到你网站的目录,最好就放在根目录下,文件夹名字就用FCKEditor: ...

  3. 过滤textarea

    Function UBBFilter(ByVal reString) Dim Str:Str=reString If Not IsNull(Str) Then Str = Replace(Str, & ...

  4. 20160504-hibernate入门

    关系型数据库与面向对象 模型不匹配(阻抗不匹配) Java面向对象语言,对象模型,其主要概念有:继承.关联.多态等:数据库是关系模型,其主要概念有:表.主键.外键等. 解决办法: 1使用JDBC手工转 ...

  5. Android 百度地图开发之一(Hello BaiDu Map)

    之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图 ...

  6. 恢复被误操作删除的数据 fn_dblog

    -- Script Name: Recover_Deleted_Data_Proc -- Script Type : Recovery Procedure  -- Develop By: Muhamm ...

  7. 接收Firfox RESTClient #Post请求

    什么是 RESTClient 请参考:http://www.blogjava.net/paulwong/archive/2014/04/19/412688.html 对接接口时经常会需要传个异步回调消 ...

  8. 三【相关度 相似度查询与计算】相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度

    记录下,在上2回的数据基础之上,附带一个互信息(MI,Mutual Information)可以计算词之间的相关度 标准互信息 MI(X,Y)=log2p(x,y)/p(x)p(y) 值越大于0 则趋 ...

  9. javascript异步执行函数导致的变量变化问题解决思路

    for(var i=0;i<3;i++) { setTimeout(function(){ console.log(i) },0); }控制台输出:333 这是因为执行方法的时候for循环已经执 ...

  10. CAF(C++ actor framework)使用随笔(send sync_send)(二)

    a). 发完就忘, 就像上面anon_send 以及send #include <iostream> #include "caf/all.hpp" #include & ...