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通过鼠标拖拽的方式调整节点位置 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript之Array 数组对象详解

    JavaScript之Array数组对象详解 什么是数组 在 JavaScript 中,数组(Array)是一种复合数据类型,用于存储一组有序的数据。可以将数组看作是一个盒子,该盒子中可以存放多个数据,而且这些数据是有序的,通过下标(索引)来访问每一个数据。 数组的创建 JavaScript 中,可以使用两种方式来创建数组: 1. 使用字面量方式创建数组 l…

    JavaScript 2023年5月27日
    00
  • 浅谈C#.NET、JavaScript和JSON

    浅谈C#.NET、JavaScript和JSON C#.NET C#.NET是由微软公司开发的一种多范式编程语言。它具有类型安全、面向对象、高性能和可维护性等特点。除了Windows操作系统外,它还支持跨平台开发,可以在Linux和macOS上编写应用程序。在C#.NET中,JSON(JavaScript Object Notation)可以方便地序列化和反…

    JavaScript 2023年5月27日
    00
  • Vue实现当前页面刷新的4种方法举例

    下面详细讲解一下“Vue实现当前页面刷新的4种方法举例”的完整攻略。 一、为什么需要页面刷新 在Web开发中,经常会遇到需要手动刷新页面的情况,例如页面数据发生变化但没有及时渲染出来、页面样式出现异常等。这些问题基本都是由于缓存导致的,在Vue中也不例外。所以,掌握Vue实现当前页面刷新的4种方法是非常重要的。 二、Vue实现当前页面刷新的4种方法 1. 通…

    JavaScript 2023年6月11日
    00
  • js预载入和JavaScript Image()对象使用介绍

    让我详细给您讲解“js预载入和JavaScript Image()对象使用介绍”的完整攻略。 什么是js预载入 当一个web页面中有大量的图片、音频等素材需要加载时,页面加载速度会明显减慢,给用户带来不好的体验。而js预载入能够做到在页面需要使用某个资源的时候提前加载资源,这样能够极大的提升用户页面加载体验。如何实现呢?下面我来介绍一下实现的具体步骤: 首先…

    JavaScript 2023年5月27日
    00
  • js打开windows上的可执行文件示例

    下面提供一份详细的js打开windows上的可执行文件的攻略。 1. 安装Node.js Node.js是一种运行在服务器端的JavaScript运行环境,可以让JavaScript运行在服务器端,调用操作系统的API以及其它的系统级功能。因此,在打开windows上的可执行文件前,需要安装Node.js。 在Node官网(https://nodejs.or…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript RegExp对象

    详解JavaScript RegExp对象 正则表达式(RegExp对象)是JavaScript高级功能中最常用的功能之一。正则表达式用于模式匹配,可用于搜索、替换和验证文本。JavaScript中RegExp对象提供了正则表达式的操作和方法。在本攻略中,我们将深入了解RegExp对象。 RegExp对象 RegExp对象是用来解析正则表达式的工具。在Jav…

    JavaScript 2023年5月27日
    00
  • js中bool值的转换及“&&”、“||”、 “!!”详解

    bool是布尔类型,只有两种取值:true和false。在JavaScript中,存在一些将非布尔值转换为布尔值的规则,这些规则叫做隐式类型转换。而“&&”、“||”、 “!!”都是实现js中布尔值转换的常用操作符。 “&&”操作符 当使用“&&”操作符时,如果两个值都是true,则返回true;否则返回fal…

    JavaScript 2023年5月28日
    00
  • 引入autocomplete组件时JS报未结束字符串常量错误

    引入autocomplete组件时JS报未结束字符串常量错误通常是因为代码中的字符串没有被正确引号包裹或者是引号嵌套错误,导致在解析代码时遇到了问题。以下是解决该问题的几个攻略: 1. 检查引号的嵌套问题 当代码中包含有引号(单引号或双引号)时,如果不注意嵌套问题,就会出现语法错误。例如: var options = "<option val…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部