`
348725767
  • 浏览: 105666 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

zTree拖拽效果

    博客分类:
  • js
阅读更多

最近好久没更新博客了,今天来一篇。以前都在做android的小软件,现在我想想还是做web吧。感觉自己还是比较喜欢做web,将来找工作也希望web方向的。因为我觉得1,android如果要学的深的话多少会和c等底层语言打交道,这些貌似很高深,没大牛指导感觉即使很努力,估计也没用。2,html5也出来了,即使分成两套标准了,可是也是趋势,估计以后的android应用如果不是和硬件交互的,估计都会做成网页的形式,这样其他平台也顺便可以用了,节约成本。3个人比较喜欢web。

废话不多了。。最近做东西要用到zTree,就花了点时间看了下zTree 的API和demo。发现demo里的拖拽很帅,同时也是我需要的效果,就顺了过来,改成了自己需要的效果。

代码如下:

 

<script type="text/javascript">
		
		var MoveTest = {
			errorMsg: "请选择正确的用户",
			curTarget: null,
			curTmpTarget: null,
			noSel: function() {
				try {
					window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
				} catch(e){}
			},
			dragTree2Dom: function(treeId, treeNodes) {
				return !treeNodes[0].isParent;
			},
			prevTree: function(treeId, treeNodes, targetNode) {
				return !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;
			},
			nextTree: function(treeId, treeNodes, targetNode) {
				return !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;
			},
			innerTree: function(treeId, treeNodes, targetNode) {
				return targetNode!=null && targetNode.isParent && targetNode.tId == treeNodes[0].parentTId;
			},
			dropTree2Dom: function(e, treeId, treeNodes, targetNode, moveType) {
				var domId = "dom_" + treeNodes[0].getParentNode().id;
				if (moveType == null) {
					var zTree = $.fn.zTree.getZTreeObj("treeDemo");
					var id=treeNodes[0].getParentNode().id;
					var shopid=treeNodes[0].id;
					//删除数据
					$.post("deleteShopUser.action",{id:id/100000,shopid:shopid/10000000000},function(data)
					{
						if(data==1)
						{
							zTree.removeNode(treeNodes[0]);
							MoveTest.updateType();
						}
					})
				}
			},
			dom2Tree: function(e, treeId, treeNode) {
				var target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;
				if (!target) return;
				var zTree = $.fn.zTree.getZTreeObj("treeDemo"), parentNode;
				if (treeNode != null && treeNode.id>=100000&&treeNode.id<10000000000) {
					parentNode = treeNode;
					parentNode.isParent = true;
					//添加数据;
					$.post("addShopUser.action",{id:parentNode.id/100000,shopid:target.attr("domId")},function(data)
					{
						if(data==0)
						{
							alert("用户: "+parentNode.name+" 已经可管理店铺: "+target.text());
							return;
						}
						else
						{
							if (tmpTarget) tmpTarget.remove();
							if (!!parentNode) {
								var nodes = zTree.addNodes(parentNode, {id:target.attr("domId")+"0000000000", name: target.text(),icon:'../IMAGES/shop.png'});
								zTree.selectNode(nodes[0]);
							} else {
								alert(MoveTest.errorMsg);
							}
							MoveTest.updateType();
							MoveTest.curTarget = null;
							MoveTest.curTmpTarget = null;
						}
					});
				}
			},
			updateType: function() {
				var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
				nodes = zTree.getNodes();
				for (var i=0, l=nodes.length; i<l; i++) {
					var usernodes=nodes[i].children;
					for(var j=0;j<usernodes.length;j++)
					{
						var num = usernodes[j].children ? usernodes[j].children.length : 0;
						usernodes[j].name = usernodes[j].name.replace(/ \(.*\)/gi, "") + " (" + num + ")";
						zTree.updateNode(usernodes[j]);
					}
				}
			},
			bindDom: function() {
				$(".domBtnDiv").bind("mousedown", MoveTest.bindMouseDown);
			},
			bindMouseDown: function(e) {
				var target = e.target;
				if (target!=null && target.className=="domBtn") {
					var doc = $(document), target = $(target),
					docScrollTop = doc.scrollTop(),
					docScrollLeft = doc.scrollLeft();
					curDom = $("<span class='dom_tmp domBtn'>" + target.text() + "</span>");
					curDom.appendTo("body");

					curDom.css({
						"top": (e.clientY + docScrollTop + 3) + "px",
						"left": (e.clientX + docScrollLeft + 3) + "px"
					});
					MoveTest.curTarget = target;
					MoveTest.curTmpTarget = curDom;

					doc.bind("mousemove", MoveTest.bindMouseMove);
					doc.bind("mouseup", MoveTest.bindMouseUp);
					doc.bind("selectstart", MoveTest.docSelect);
				}
				if(e.preventDefault) {
					e.preventDefault();
				}
			},
			bindMouseMove: function(e) {
				MoveTest.noSel();
				var doc = $(document), 
				docScrollTop = doc.scrollTop(),
				docScrollLeft = doc.scrollLeft(),
				tmpTarget = MoveTest.curTmpTarget;
				if (tmpTarget) {
					tmpTarget.css({
						"top": (e.clientY + docScrollTop + 3) + "px",
						"left": (e.clientX + docScrollLeft + 3) + "px"
					});
				}
				return false;
			},
			bindMouseUp: function(e) {
				var doc = $(document);
				doc.unbind("mousemove", MoveTest.bindMouseMove);
				doc.unbind("mouseup", MoveTest.bindMouseUp);
				doc.unbind("selectstart", MoveTest.docSelect);

				var target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;
				if (tmpTarget) tmpTarget.remove();

				if ($(e.target).parents("#treeDemo").length == 0) {
					if (target) {
						target.removeClass("domBtn_Disabled");
						target.addClass("domBtn");
					}
					MoveTest.curTarget = null;
					MoveTest.curTmpTarget = null;
				}
			},
			bindSelect: function() {
				return false;
			}
		};
		
		var setting = {
			edit: {
				enable: true,
				showRemoveBtn: false,
				showRenameBtn: false,
				drag: {
					prev: MoveTest.prevTree,
					next: MoveTest.nextTree,
					inner: MoveTest.innerTree
				}
			},
			async: {
				enable: true,
				url:"userList.action"
			},
			data: {
				keep: {
					parent: true,
					leaf: true
				},
				simpleData: {
					enable: true
				}
			},
			callback: {
				beforeDrag: MoveTest.dragTree2Dom,
				onDrop: MoveTest.dropTree2Dom,
				onMouseUp: MoveTest.dom2Tree
			},
			view: {
				selectedMulti: false
			}
		};
		$(document).ready(function(){
		
			 $.post("shopList.action", function(data) {
			 	var jsondata=strCut(data);
				$.each(jsondata,function(index)
				{
					var obj=jsondata[index];
					var shop="<span class='domBtn' domId='"+obj.id+"'>"+obj.name+"</span>"
					$("#dom_1").append(shop);
				});
				
				$.fn.zTree.init($("#treeDemo"), setting);
				MoveTest.updateType();
				MoveTest.bindDom();
			 });
			
		});
	</script>

 

 html

 

<div>
			<ul id="treeDemo" class="ztree"></ul>
		</div>
		<div class="domBtnDiv">
			<div id="dom_1" class="categoryDiv"></div>
		</div>

 

 css

 

.dom_line {margin:2px;border-bottom:1px gray dotted;height:1px}
.domBtnDiv {display:block;padding:2px;border:1px gray dotted;
background-color:powderblue;float:left;margin-top:10px;margin-left:10px;}
.categoryDiv {display:inline-block; width:600px;height:450px;}
.domBtn {display:inline-block;cursor:pointer;padding:2px;
margin:2px 10px;border:1px gray solid;background-color:#FFE6B0}
.dom_tmp {position:absolute;font-size:12px;}
 

ajax调用了addShopUser.action和deleteShopUser.action返回值都为1,这你们可以自己模拟。只要访问两个路径,回调值为1就行了。还有userList.action是返回树的数据,格式如"[{id:1,name:'fhy1',pId:0,open:true}, {id:2,name:'我的店铺',pId:1} ]"

 

当然你要导入zTree的相关js和jquery相关js。附件里有。当然附件里有原来的demo,路径是JQuery zTree v3.3\demo\cn\super\dragWithOther.html。你也可以自己根据需要,改成不同了。

附效果图一张:

 

 

 

 

 

  • 大小: 19.4 KB
分享到:
评论
1 楼 cnyangqi 2013-07-09  
。。。我还以为是demo。。。

相关推荐

    jsPlumbToolkit +ztree拖拽连线demo

    **jsPlumbToolkit与zTree拖拽连线Demo详解** 在前端开发中,有时我们需要实现图形化界面,允许用户通过拖拽元素并建立连接来构建或编辑数据结构。在这个场景下,`jsPlumbToolkit` 和 `zTree` 这两个JavaScript库能...

    ztree 异步加载 拖拽 右键菜单 功能

    **zTree - 异步加载、拖拽与右键菜单功能详解** zTree是一款基于JavaScript的树形插件,广泛应用于...在实际应用中,开发者应结合自身项目需求,灵活配置zTree的各项参数,并编写适当的事件处理代码,以实现最佳效果。

    zTree-zTree_v3-master.zip_ztree_多功能插件

    在配置方面,zTree提供了丰富的参数设置,开发者可以根据实际需求调整节点的样式、行为以及交互效果。例如,可以通过配置实现节点的点击事件、右键菜单、拖拽操作、多选功能等。此外,zTree还支持自定义图标,使得每...

    ztree_bootstrap样式风格

    `ZTree`的功能强大,支持多种操作,如选择、拖拽、编辑等,广泛应用于权限管理、文件目录、组织结构等场景。而`Bootstrap`则是世界上最流行的前端开发框架,以其简洁、灵活和响应式的设计理念受到开发者喜爱。 标题...

    ztree使用说明ztree.zip

    `setting`对象用于配置zTree的行为和样式,包括节点的展开方式、拖拽操作、右键菜单等。例如,设置默认展开所有节点: ```javascript var setting = { data: { simpleData: { enable: true, idKey: "id", pId...

    JQuery zTree v3.3

    4. **自定义样式与事件**:zTree提供了丰富的CSS类和回调函数,开发者可以定制节点的样式,以及响应各种用户交互事件,如点击、双击、拖拽结束等,以实现个性化的交互效果。 5. **多语言支持**:zTree内置了多种...

    zTree树的Demo及全部文档

    - **拖拽操作**:支持节点的拖拽移动,实现树结构的动态调整。 - **点击事件**:通过监听鼠标点击事件,可以实现节点的选中、展开、折叠等操作。 - **编辑功能**:允许用户对节点进行添加、修改、删除等操作,...

    亲测可用的zTree树菜单插件

    总结来说,zTree是一个强大且实用的JavaScript树形菜单插件,它的易用性和灵活性使得在各种项目中都能发挥出色的效果。通过理解其基本概念和特性,结合具体需求进行配置和扩展,你可以轻松地构建出满足业务需求的树...

    JQuery zTree v3.4 ztree

    - `css`:存储 zTree 的默认 CSS 样式文件,用于控制树节点的显示效果。 - `demo`:包含多个演示实例,演示如何使用 zTree 实现各种功能。 总的来说,JQuery zTree v3.4 是一个强大且灵活的树形控件,能够为...

    easyui+ztree后台管理系统模板

    6. **开发实践**:在实际使用这个模板时,开发者需要注意数据接口的对接,将后端服务器提供的JSON数据与EasyUI的表格、ZTree的节点数据进行绑定,同时处理用户的交互事件,如点击、拖拽等,以实现完整的业务逻辑。...

    Jquery-ztree树形菜单代码并适应移动端

    - **css**:这个文件夹包含zTree的样式文件,如`zTreeStyle.css`,它是zTree的基础样式,用于控制树节点的显示效果,包括颜色、字体、边框、背景等。在这个项目中,可能还包含了一些针对移动端优化的CSS规则。 - **...

    后台框架easyLayou+ztree

    ZTree支持动态加载、拖拽操作、节点选中、多选、异步数据加载等功能,为后台管理系统的菜单、权限分配等场景提供了便利。通过设置不同事件和属性,开发者可以定制出满足特定需求的交互效果。 在后台框架中集成...

    zTree-zTree_v3-master.zip

    6. **节点事件**:zTree提供了一系列的事件处理机制,如点击节点、双击节点、拖拽节点等,开发者可以通过监听这些事件实现交互逻辑。 7. **图标自定义**:zTree允许用户自定义节点图标,可以依据节点状态或数据属性...

    zTree_v3完整工具

    组合功能是指zTree_v3能够将多种特性集成在一个树中,例如,它可以同时支持复选框、单选按钮、自定义图标、拖拽排序等功能。这些组合功能使得zTree_v3能够满足复杂多样的业务需求,让开发者可以轻松创建出具有多种...

    ztree2.zip

    ZTree可以通过自定义皮肤、图标、动画效果等方式进行个性化设计。同时,结合其他jQuery插件,如表单验证、拖拽排序等,可以实现更复杂的应用场景。 总结,jQuery ZTree是一个强大且灵活的树形组件,无论是用于构建...

    zTree-zTree_v3-v3.5.01

    zTree提供了多种预设的节点样式和图标,可以轻松定制节点的显示效果。同时,它还支持节点的拖放操作,允许用户通过拖拽节点来重新组织树形结构,这对于需要进行数据排序和管理的应用场景非常有用。zTree还支持节点的...

    jquery ztree.rar 资源下载

    6. **高级功能**:zTree还提供了异步加载、多选、复选、拖拽排序、权限控制等高级功能,满足各种复杂的业务需求。 7. **自定义扩展**:zTree的可扩展性强,允许开发者自定义节点模板,实现个性化显示,或者通过插件...

    zTree_v3.zip

    3. **事件处理**:zTree提供丰富的事件接口,如点击、双击、拖拽等,开发者可以通过监听这些事件来实现交互功能。 4. **权限控制**:通过设定节点的权限标识,zTree可以实现对用户的权限控制,只允许特定用户操作...

    JQuery zTree v2.6.zip

    4. **扩展性**:zTree支持自定义节点样式和图标,可以轻松实现节点的展开/折叠、选择、拖拽、右键菜单等功能。同时,v2.6版本还增强了异步加载和数据更新的能力,适应了大数据量和实时更新的场景。 5. **兼容性**:...

    SSH+ztree+ajax+json

    5. **交互处理**:用户在ZTree上进行点击、拖拽等操作时,可以触发事件监听器,通过Ajax再次与服务器通信,实现动态交互功能。 这个项目的源代码可能会包含以下几个部分: - 后端:SSH框架的控制器(Controller)...

Global site tag (gtag.js) - Google Analytics