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

yizhihongxing

以下是关于“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常用的3种弹出框(提示框 alert/确认框 confirm/输入框 prompt)

    下面是关于 JavaScript 常用的3种弹出框的完整攻略: 弹出框概述 弹出框是我们在使用 JavaScript 时非常常见的交互方式,它所表现的形式有很多,其中最常见的就是提示框、确认框和输入框,分别由函数 alert()、confirm() 和 prompt() 提供支持。在实际开发中,我们可以根据具体需求调用不同的弹出框,来满足我们对用户操作的提示…

    JavaScript 2023年6月11日
    00
  • Javascript Global undefined 属性

    JavaScript中的undefined是一个全局属性,表示一个未定义的值。如果一个变量没有被赋值,则该变量的值为undefined。以下是关于undefined全局属性的完整攻略,包括两个示例。 JavaScript Global对象中的undefined属性 JavaScript Global对象中的undefined属性表示一个未定义的值。如果一个变…

    JavaScript 2023年5月11日
    00
  • 魔鬼字典 JavaScript 笔记 代码比较多乱第3/3页

    下面是详细讲解“魔鬼字典 JavaScript 笔记 代码比较多乱第3/3页”的完整攻略。 1. 了解魔鬼字典的功能 魔鬼字典是一个基于 JavaScript 实现的词典工具,可以帮助用户查询单词的翻译、同义词、反义词和例句等信息。该工具的主要功能包括: 解析用户输入的单词,并根据单词的不同词性展示不同的内容。 可以查询单词的翻译、同义词、反义词和例句等信息…

    JavaScript 2023年5月19日
    00
  • 浅析JS中document对象的一些重要属性

    下面是关于“浅析JS中document对象的一些重要属性”的完整攻略: 一、什么是document对象 document对象代表当前HTML文档,是网页与JavaScript交互的关键。我们可以通过document对象来获取并操纵HTML元素,实现网页的动态效果。 二、 document对象的一些重要属性 1. document.title document…

    JavaScript 2023年6月10日
    00
  • Web前端新人笔记之jquery入门心得(新手必看)

    来详细讲解一下“Web前端新人笔记之jquery入门心得(新手必看)”的完整攻略。 1. 前言 在介绍 jQuery 入门心得之前,需要先了解什么是 jQuery。jQuery 是一款快速、简洁的 JavaScript 库,是为了更简单地操作 HTML 文档、处理事件、实现动画效果和数据交互等功而开发的。jQuery 支持主流的浏览器,并且具有代码简洁、开发…

    JavaScript 2023年5月18日
    00
  • JS中轻松遍历对象属性的几种方式

    关闭符合MD格式的字体 JS中轻松遍历对象属性的几种方式 JS中的对象是一种非常重要的数据类型,有时候我们需要遍历对象的所有属性以进行操作。下面是几种轻松遍历对象属性的方式: 方式1:for…in循环遍历对象 for…in是一种常见的遍历对象属性的方法。它可以遍历对象上的所有属性,可以处理对象本身定义的属性,还可以处理从Object.prototyp…

    JavaScript 2023年5月27日
    00
  • 5分钟快速搭建vue3+ts+vite+pinia项目

    以下是详细讲解“5分钟快速搭建vue3+ts+vite+pinia项目”的完整攻略。 1. 创建项目 首先,我们需要先安装 Node.js 和 npm 包管理器,然后通过 npm 在命令行中执行以下命令来创建一个新的 Vue 3 TypeScript 项目: npm init vite@latest my-project –template vue-ts …

    JavaScript 2023年6月11日
    00
  • Javascript中神奇的this

    Javascript中神奇的this攻略 在Javascript中,this是一个非常重要的概念。它代表了当前函数执行的上下文。但是,由于其特殊的语法规则与行为,经常会导致混乱和错误。在此,我们将讨论Javascript中神奇的this及其使用攻略。 常见的this绑定规则 在Javascript中,this的绑定有四种方法,它们分别是: 默认绑定规则:当一…

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