jsMind通过鼠标拖拽的方式调整节点位置

以下是关于“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通过鼠标拖拽的方式调整节点位置

基础教程推荐