以下是关于“jsMind通过鼠标拖拽的方式调整节点位置”的攻略:
以下是关于“jsMind通过鼠标拖拽的方式调整节点位置”的攻略:
步骤一:引入jsMind库
在页面上引入jsMind库,可以通过以下代码链接到jsMind库:
<!--引入jsMind库 CSS文件-->
<link rel="stylesheet" type="text/css" href="path/to/jsmind.css" />
<!--引入jsMind库 JS文件-->
<script type="text/javascript" src="path/to/jsmind.js"></script>
其中path/to/
表示库文件所在的具体路径。
步骤二:创建一个jsMind实例
使用以下代码创建一个简单的jsMind实例:
<!--创建一个容器元素-->
<div id="container"></div>
<!--创建jsMind实例-->
<script>
var options = {
container: 'container',// 容器的ID
editable:true, // 启用节点编辑
// 更多配置项可以参考文档
}
var mind = {
"meta": {"name":"jsMind画图", "author":"hizzgdev@163.com", "version":"0.2"},
"format":"node_array",
"data":[
{"id":"root", "topic":"jsMind"}
]
}
var jm = new jsMind(options);
jm.show(mind);
</script>
该示例中,创建了一个包含id为“container”的div作为画布容器,通过jsMind的构造函数创建了一个jm实例,jm.show(mind)将mind数据展示在容器中。
步骤三:创建节点及调整节点位置
可以通过以下代码添加一个子节点和进行调整节点位置:
<script>
// 添加一个子节点
var node = jm.add_node(parent_node, "new_node");
// 调整节点位置
var node_location = jm.get_node_location(node.id); // 获取节点坐标
node_location.x += 10; // 调整横坐标
node_location.y += 20; // 调整纵坐标
jm.set_node_location(node.id, node_location); // 更新节点位置
</script>
其中,parent_node
为新节点的父节点。
示例一:调整已有节点位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsMind拖拽节点</title>
<!--引入jsMind库-->
<link rel="stylesheet" type="text/css" href="https://unpkg.com/jsmind/dist/jsmind.min.css" />
<script type="text/javascript" src="https://unpkg.com/jsmind/dist/jsmind.min.js"></script>
</head>
<body>
<h1>jsMind拖拽节点示例</h1>
<hr />
<!--创建画布容器-->
<div id="container"></div>
<script>
// 创建jsMind实例
var options = {
container: 'container',// 容器的ID
editable:true, // 启用节点编辑
// 更多配置项可以参考文档
}
var mind = {
"meta": {"name":"jsMind画图", "author":"hizzgdev@163.com", "version":"0.2"},
"format":"node_array",
"data":[
{"id":"root", "topic":"jsMind"},
{"id":"sub1", "topic":"jsMind-Sub1", "parentid":"root"},
{"id":"sub2", "topic":"jsMind-Sub2", "parentid":"root"}
]
}
var jm = new jsMind(options);
jm.show(mind);
// 调整节点位置
var sub1_location = jm.get_node_location("sub1"); // 获取节点坐标
sub1_location.x += 50; // 调整横坐标50
sub1_location.y += 50; // 调整纵坐标50
jm.set_node_location("sub1", sub1_location); // 更新节点位置
</script>
</body>
</html>
该示例中,首先创建了一个有三个节点的示例画布,并在代码中通过get_node_location和set_node_location方法定位到id为“sub1”的节点并进行了位置的微调。
示例二:拖拽调整节点位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsMind拖拽节点</title>
<!--引入jsMind库-->
<link rel="stylesheet" type="text/css" href="https://unpkg.com/jsmind/dist/jsmind.min.css" />
<script type="text/javascript" src="https://unpkg.com/jsmind/dist/jsmind.min.js"></script>
</head>
<body>
<h1>jsMind拖拽节点示例</h1>
<hr />
<!--创建画布容器-->
<div id="container"></div>
<script>
// 创建jsMind实例
var options = {
container: 'container',// 容器的ID
editable:true, // 启用节点编辑
// 更多配置项可以参考文档
}
var mind = {
"meta": {"name":"jsMind画图", "author":"hizzgdev@163.com", "version":"0.2"},
"format":"node_array",
"data":[
{"id":"root", "topic":"jsMind"},
{"id":"sub1", "topic":"jsMind-Sub1", "parentid":"root"},
{"id":"sub2", "topic":"jsMind-Sub2", "parentid":"root"}
]
}
var jm = new jsMind(options);
jm.show(mind);
// 添加节点并拖拽移动
var node = jm.add_node("root", "newNode");
jm.add_node(node.id, "newChildNode");
var location = jm.get_node_location(node.id);
jm.add_event(location, 'mousedown', function(e){
// 拖拽开始
var node_element = jm.get_element_by_id(node.id);
var rect = node_element.getBoundingClientRect();
var container_element = jm.get_container();
var ctp = container_element.getBoundingClientRect();
// 相对距离
var x = rect.left - ctp.left + (rect.width / 2);
var y = rect.top - ctp.top + (rect.height / 2);
// 全局绑定mousemove和mouseup事件
var jdoc = $(document);
var handleMouseMove = function(e){
// 拖拽过程
var cx = e.clientX || e.pageX || e.x;
var cy = e.clientY || e.pageY || e.y;
var dx = cx - x - ctp.left;
var dy = cy - y - ctp.top;
jm.move_node_to(node.id, dx, dy);
}
var handleMouseUp = function(e){
// 拖拽结束
jdoc.off('mousemove', handleMouseMove);
jdoc.off('mouseup', handleMouseUp);
}
jdoc.on('mousemove', handleMouseMove);
jdoc.on('mouseup', handleMouseUp);
});
</script>
</body>
</html>
该示例中,首先创建了一个有三个节点的示例画布,在代码中使用了add_node方式添加了一个新节点,并使用jm.move_node_to方法和全局鼠标事件mousemove和mouseup实现了节点的拖拽移动效果。其中,主要通过get_element_by_id获取被拖拽节点的元素,以及mouse事件和jsMind的move_node_to方法配合实现拖拽移动效果。
本文标题为:jsMind通过鼠标拖拽的方式调整节点位置
基础教程推荐
- 关于layui数据表格的各种事件 2022-12-13
- vue创建组件的两种方式 2023-10-08
- vue项目打包后,favorite.icon不见了 2023-10-08
- vue开发反思总结 2023-10-08
- JavaScript Image对象实现原理实例解析 2023-08-08
- 未知大小图片在已知容器中的垂直和水平居中问题 2022-10-16
- Vue封装全局防抖节流函数 2023-10-08
- 使用XHTML1.0 Strict中需要特别注意的地方 2022-11-04
- HTML页面滚动时部分内容位置固定不滚动的实现 2022-09-20
- Javascript 虚拟 DOM详解 2023-08-08