DHTMLX系列组件的使用(2)——常用Accordion API

续前一篇DHTMLX系列组件的使用(1)——QQ风格面板的制作,下面介绍常用Accordion API。

 

1. 初始化

<script type="text/javascript">
var dhxAccord;
function doOnLoad() {
    var dhxAccorData = {
        parent: "accordObj",
        items: [{
            id: "a1",
            text: "Gothic 3 Forsaken Gods",
            open: true
        }, {
            id: "a2",
            text: "NFS Undercover"
        }, {
            id: "a3",
            text: "Diablo 2 Lord Of Destruction"
        }]
    };
dhxAccord = new dhtmlXAccordion(dhxAccorData);
}
</script>

这部分代码与下面的代码一样达到同样的效果。

<script type="text/javascript">
var dhxAccord;
function doOnLoad() {
	dhxAccord = new dhtmlXAccordion("accordObj");
	//dhxAccord.setSkin("dhx_black");
	dhxAccord.addItem("a1", "Main Page");
	dhxAccord.addItem("a2", "Site Navigation");
	dhxAccord.addItem("a3", "Support & Feedback");
	dhxAccord.addItem("a4", "Comments");
	dhxAccord.openItem("a1");
    dhxAccord._enableOpenEffect = true;
}
</script>

两部分相比较,或许更容易理解addItem函数中两个参数的意义,前一个是item的id值,后一个则是其标题属性。

 

2. Unload Accordion

dhxAccord.unload(); // 调用unload函数即可

// example
function unloadAccord() {
    if (!dhxAccord)
        return;
    dhxAccord.unload();
    dhxAccord = null;
}

 说明:dhxAccord是dhtmlXAccordion对象的一个实例,下同。

 

3. Adding Items

dhxAccord.addItem("id", "item text");

参数说明: 前一个是item的id值,后一个则是其标题属性。

 

4. 向下扩展的item

<script type="text/javascript">
function doOnLoad1() {
    dhxAccord = new dhtmlXAccordion("accordObj");
    dhxAccord.enableMultiMode();
    dhxAccord.addItem("a1", "Main Page");
    dhxAccord.addItem("a2", "Site Navigation");
    dhxAccord.addItem("a3", "Support & Feedback");
    dhxAccord.addItem("a4", "Comments");
    //dhxAccord.openItem("a1");
    dhxAccord._enableOpenEffect = true;
}
</script>

 说明:首先需要调用enableMultiMode函数,然后添加item,设置动画效果等。注意,该模式下,openItem函数无效。效果图如下所示。

5. 标题读写

// Note: dhxAccord is an object of dhtmlXAccordion
item.setText(“text”);
var text = item.getText(“text”);
or:
dhxAccord.cells(“id”).setText(“text”);
var text = dhxAccord.cells(“id”).getText(“text”);

 

6. 循环遍历item

dhxAccord.forEachItem(function(item) {
    // you can use the parameter ‘item’ to do something
});

 

7. item图标设置

dhxAccord.setIconsPath("icon path");
dhxAccord.cells(“id”). setIcon (“icon path”);
dhxAccord.cells(“id”). clearIcon ();
// example:
dhxAccord.setIconsPath("../common/");
dhxAccord.cells(“id”). setIcon (“icon1.gif”);

说明:首先需要调用 setIconsPath 函数设置图标路径,然后调用 setIcon 函数设置图标即可。对于已经设置了图标的item,可以调用clearIcon 函数将其清除。

 

8. 打开/关闭 item

// Note: dhxAccord is an object of dhtmlXAccordion
item.open();
item.close();
// or:
dhxAccord.cells(“id”). open();
dhxAccord.cells(“id”). close();

 

9. 显示/隐藏 item

// Note: dhxAccord is an object of dhtmlXAccordion
item. show ();
item. hide ();
// or:
dhxAccord.cells(“id”). show ();
dhxAccord.cells(“id”). hide ();

 

10. 展开/折叠效果设置

dhxAccord.setEffect(true);
dhxAccord.setEffect(false);

 

11. 皮肤设置 

<link rel="stylesheet" type="text/css" href="codebase/skins/dhtmlxaccordion_dhx_skyblue.css">
<link rel="stylesheet" type="text/css" href="codebase/skins/dhtmlxaccordion_dhx_blue.css">
<link rel="stylesheet" type="text/css" href="codebase/skins/dhtmlxaccordion_dhx_black.css">

// example
dhxAccord.setSkin('dhx_black');

 说明:首先需要引入三种皮肤样式文件,然后调用setSkin函数,并指定具体参数即可。

 

12.  向 item 中添加元素

dhxAccord.cells("id").attachObject("objectId");

说明:前一个参数是 item 的 id 值,后一个是要添加的元素的 id 值。

 

13.  onActive 事件(激活 item)

dhxAccord.attachEvent("onActive", function(itemId) {
	// do something you like
});

 

14. onBeforeActive 事件(激活之前)

dhxAccord.attachEvent("onBeforeActive", function(itemId) {
        // return a bool value to tell the dhxAccord whether the item can be opened
});

 

15. Attach Functions

在Accordion API中,还有很多以 attach 为前缀的函数,由于很多都涉及到其他的组件,所以这里暂时不做介绍。其实从字面意思可以看出,这些函数要实现的功能是将组件或者元素添加到 item 中,比如,menu,toolbar,window等。

 

综上,上述只是列出了常用Accordion API,如果有什么遗漏或者有什么地方说的不对的,欢迎指出。

 

 

 

-----------------------------------------------------

Stay Hungry, Stay Foolish!

Afa

May 22nd, 2010

-----------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dhtmlXTree进行一个小的扩展 需求1: 动态生成树形菜单,每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL。(框架页说明:左边是树形菜单;右边是显示页面相应信息的页面) 分析: dhtmlXTree提供了很好的添加,删除节点的方法,故dhtmlXTree。 但是dhtmlXTree不能满足"每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL"这点需求,因次想到了对dhtmlXTree进行一个小的扩展,即在其节点对象原有属性的基础上,再添加两个扩展属性。具体操作如下: 1、找到定义节点对象的那个函数(或方法) function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode) 修改为 function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode,url,target) 并在方法体中添加赋值语句:this.itemURL=url;this.itemTarget=target; 2、然后修改所有与dhtmlXTreeItemObject有关(直接或者间接相关)的方法: _attachChildNode,insertNewItem,insertNewChild,insertNewNext,_recreateBranch,_parseXMLTree 注:_parseXMLTree方法是与loadXML,loadXMLString相关的。 在这些方法中生成节点的语句中添加相应的参数和语句,以支持新添加的属性itemURL,itemTarget。 需求2: 为dhtmlXTree树上的每一个节点添加右键菜单。附:在树上的节点上点右键时才会生成菜单,空白区域单击时不会生成菜单。 分析: 1、用 dhtmlXTree + dhtmlxmenu 实现。 2、 用dhtmlxmenu生成菜单的部分代码: var menu = new dhtmlXMenuObject(); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone("treeboxbox_tree"); menu.addContextZone方法是为了把菜单添加到指定区域。 3、dhtmlXTreeObject.prototype._createItem方法是构造树形菜单上元素的具体实现方法。看这个方法的具体操作,可以发现它为每一个节点构建了一个table,节点的内容(即名字)放置在一个span中。 4、考虑到dhtmlxmenu实在指定的区域构建菜单,所以可以为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 难点和解决方案: 1、怎样获得dhtmlXTree树上的每一个节点对象所对应的区域?(dhtmlXTreeObject.prototype._createItem方法没有为这个节点的span设置id) 解决方法: 在dhtmlXTreeObject.prototype._createItem方法中添加一个为span设置id的语句: 即: 在itemObject.span=document.createElement('span'); itemObject.span.className="standartTreeRow"; 后,新添加一句 itemObject.span.id="treeNode_"+itemObject.id;//为这个span新增一个Id属性 2、为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 解决方法: a、为dhtmlXTree树上的每一个节点添加右键事件: tree.setOnRightClickHandler(treeOnRegihtClick);//右键事件 b、构建Menu菜单: var menu = new dhtmlXMenuObject(); function treeOnRegihtClick(id){ alert("右键 "+" span.id:"+tree.getItem(id).span.id); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone(tree.getItem(id).span.id);alert("width:"+tree.getItem(id).span.clientWidth); //var X=tree.getItem(id).span.getBoundingClientRect().left; //var Y=tree.getItem(id).span.getBoundingClientRect().top; var X=document.getElementById('mouseXPosition').value;//获得鼠标的横坐标位置 var Y=document.getElementById('mouseYPosition').value;//获得鼠标的纵坐标位置 menu.showContextMenu(X,Y);//调用showContextMenu方法显示菜单 说明:如果这儿不加上这条语句的话,第一次点击右键时只能生成菜单,但是显示不出菜单,下次点击右键Menu菜单才能弹出。 //menu._showContextMenu(X,Y,tree.getItem(id).span.id); } c、用 javascript 获取当页面上鼠标(光标)位置 <script type="text/javascript"> // 说明:获取鼠标位置 function mousePosition(ev){ if(ev.pageX || ev.pageY){ return {x:ev.pageX, y:ev.pageY}; } return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop }; } document.onmousemove = mouseMove; function mouseMove(ev){ ev = ev || window.event; var mousePos = mousePosition(ev); document.getElementById('mouseXPosition').value = mousePos.x; document.getElementById('mouseYPosition').value = mousePos.y; } </script> 页面上放置两个隐藏域存放鼠标的位置:<input type="hidden" id=mouseXPosition><input type="hidden" id=mouseYPosition>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值