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 系统文件夹文件操作及参数介绍

    下面是关于“javascript 系统文件夹文件操作及参数介绍”的完整攻略。 标题 JavaScript 系统文件夹文件操作 介绍 JavaScript 可以通过 Node.js 模块 fs 来操作系统文件夹和文件。其中,fs 模块提供了一系列的 API,让开发者能够以代码的方式对文件进行读写、更改、创建、删除等操作。 API 参数介绍 以下为几个常用的 A…

    JavaScript 2023年5月27日
    00
  • javascript数组去重小结

    JavaScript数组去重小结 什么是数组去重 JavaScript中的数组去重是指将一个数组中重复的元素保留一个,去除其余的元素,使得最终数组中不含有重复元素。 常见的去重方法 1.使用ES6的Set对象 Set对象是ES6中引入的一种新的数据类型,它类似于数组,但是不允许数组元素重复。因此,我们可以使用Set对象来实现数组去重。 let arr = […

    JavaScript 2023年5月27日
    00
  • 显示js对象所有属性和方法的函数

    要显示 JS 对象的所有属性和方法,需要使用以下两种方法之一。 方法一:for…in 循环 使用 for…in 循环可遍历该对象所有可枚举的属性名称,从而显示对象的属性和方法。 function showProperties(obj) { for (var propName in obj) { console.log(propName); } } 该…

    JavaScript 2023年5月27日
    00
  • JS实现消灭星星案例

    下面是针对JS实现消灭星星案例的完整攻略及示例说明: 简介 消灭星星是一款用JS实现的小游戏,玩家需要点击拥有相同颜色的符号,消除它们并获取分数。本文将详细介绍如何用JS实现这个小游戏。 基础知识 在开始之前,你需要掌握以下基础知识: HTML: 用来展示游戏界面; CSS: 用来美化游戏界面; JS: 用来控制游戏逻辑。 实现步骤 第一步:准备工作 首先,…

    JavaScript 2023年6月11日
    00
  • JS实现手写 forEach算法示例

    当我们需要在JavaScript中对数组中的每个元素进行操作时,可以使用forEach方法。但是,如果我们想要深入了解forEach方法的实现过程,那么我们可以使用手写forEach算法来了解它的原理。 实现步骤 首先,我们需要明确手写forEach算法的实现步骤: (1)接收一个数组和一个回调函数作为参数; (2)依次遍历数组中的每个元素; (3)对每个元…

    JavaScript 2023年5月28日
    00
  • jQuery轻量级表单模型验证插件

    下面是jQuery轻量级表单模型验证插件的完整攻略: 一、简介 jQuery轻量级表单模型验证插件是一款基于jQuery的表单验证插件,通过对表单输入内容的验证和检查,可以有效保证表单数据的有效性和安全性。 二、使用步骤 1. 引入插件 首先需要在HTML文档中引入jQuery和该插件的js文件: <script src="https://c…

    JavaScript 2023年6月10日
    00
  • JavaScript面向对象程序设计教程

    JavaScript面向对象程序设计教程攻略 什么是面向对象? 面向对象是一种编程范式,它将数据和行为组织在一起,描述真实世界中的事物,并允许程序员定义这些事物的相关操作。在JavaScript中,面向对象编程可以通过对象的创建来实现。 JavaScript中的面向对象 JavaScript是一种基于原型的面向对象语言。它通过原型链来实现继承和数据共享,这种…

    JavaScript 2023年5月27日
    00
  • JS函数进阶之prototy用法实例分析

    下面我详细讲解一下 “JS函数进阶之prototype用法实例分析” 的完整攻略。 1. 什么是JS中的prototype 在JavaScript中,每个函数都有一个prototype属性,它是函数构造器的原型对象,也是通过构造器创建的对象的原型。这个原型对象是一个普通对象,其中包含一些方法和属性,它们可以被构造器所创建的所有实例对象所共享。 2. prot…

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