antv/x6_2.0学习使用(二、画布)

画布

一. 创建容器
  • 在页面中创建一个 div 标签,用来容纳画布
<div id="container"></div>
  • 画布常用配置信息
const graph = new Graph({container: graphRef.value, // 画布容器width: 800, // 画布宽度,默认使用容器宽度height: 600, // 画布高度,默认使用容器高度autoResize: false, // 是否监听容器大小改变,并自动更新画布大小。background: { color: "#F2F7FA" },grid: {// 网格,默认使用 10px 的网格,但不绘制网格背景size: 10,visible: true,// 网格类型,内置四种网格类型// dot(默认值) -> 点状网格// fixedDot -> 固定网点大小的点状网格。当画布的缩放比例小于 1 时,网点大小随着画布缩放比例缩放,当画布缩放比例大于 1 时,网点大小为给定的 thickness 的值。// mesh -> 网状网格// doubleMesh -> 双线网状网格type: "doubleMesh",args: [{color: "#eee", // 主网格线颜色thickness: 1, // 主网格线宽度},{color: "#ddd", // 次网格线颜色thickness: 1, // 次网格线宽度factor: 4, // 主次网格线间隔},],},panning: {// 画布是否可以拖拽平移,默认禁用。enabled: true, // 是否开启画布平移交互。// 触发画布平移的交互方式。支持三种形式或者他们之间的组合:// leftMouseDown: 按下鼠标左键移动进行拖拽// rightMouseDown: 按下鼠标右键移动进行拖拽// mouseWheel: 使用鼠标滚轮滚动拖拽// mouseWheelDown: 按下鼠标滚轮进行拖拽eventTypes: ["rightMouseDown"],},mousewheel: true, // 鼠标滚轮缩放,默认禁用connecting: {allowEdge: false, // 是否允许边链接到另一个边,默认为 trueallowMulti: false, // 是否允许在相同的起始节点和终止之间创建多条边,默认为 trueallowLoop: false, // 是否允许创建循环连线,即边的起始节点和终止节点为同一节点,默认为 trueallowBlank: false, // 是否允许连接到画布空白位置的点validateConnection({// 在移动边的时候判断连接是否有效,如果返回 false,当鼠标放开的时候,不会连接到当前元素,否则会连接到当前元素sourceView,targetView,sourceMagnet,targetMagnet,}) {if (!sourceMagnet) return false;if (!targetMagnet) return false;return true;},},embedding: {//可以将一个节点拖动到另一个节点中,使其成为另一节点的子节点enabled: true,findParent({ node }) {const bbox = node.getBBox();return this.getNodes().filter((node) => {// 只有 data.parent 为 true 的节点才是父节点const data = node.getData();if (data && data.parent) {const targetBBox = node.getBBox();return bbox.isIntersectWithRect(targetBBox);}return false;});},},
});
二. 渲染节点和边
  • X6 支持 JSON 格式数据,该对象中 nodes 代表节点数据,edges 代表边数据,可以使用 attrs 属性来定制节点和边的样式(可以类比 CSS)。
// 画布加载的数据
const data = {nodes: [{id: "node1",shape: "rect",x: 40,y: 40,width: 100,height: 40,label: "hello",attrs: {body: {stroke: "#8f8f8f",strokeWidth: 1,fill: "#fff",rx: 6,ry: 6,},},},{id: "node2",shape: "rect",x: 160,y: 180,width: 100,height: 40,label: "world",attrs: {body: {stroke: "#8f8f8f",strokeWidth: 1,fill: "#fff",rx: 6,ry: 6,},},},],edges: [{shape: "edge",source: "node1",target: "node2",label: "x6",attrs: {line: {stroke: "#8f8f8f",strokeWidth: 1,},},},],
};graph.fromJSON(data); // 画布渲染数据
graph.centerContent(); // 将画布内容中心与视口中心对齐

以下是效果图
在这里插入图片描述

三. 画布大小自适应问题

在实例化 Graph 对象的时候,可以通过设置 width 和 height 固定画布大小,如果不设置,就会以画布容器大小初始化画布。

  • 在项目实践中,经常会遇到下面两种场景:
    • 画布容器还没有渲染完成(此时尺寸为 0),就实例化画布对象,导致画布元素显示异常。
    • 页面的 resize 导致画布容器大小改变,导致画布元素显示异常。

可以使用 autoResize 配置来解决上述问题。

<!-- 注意,使用 autoResize 配置时,需要在画布容器外面再套一层宽高都是 100% 的外层容器,在外层容器上监听尺寸改变,当外层容器大小改变时,画布自动重新计算宽高以及元素位置。 -->
<div style="width:100%; height:100%"><div id="container"></div>
</div>
const graph = new Graph({container: document.getElementById("container"),autoResize: true,
});
三. 常用AIP
graph.resize(800, 600) // resize 画布大小
graph.translate(20, 20) // 在 x、y 方向上平移画布
graph.zoom(0.2) // 将画布缩放级别增加 0.2(默认为1)
graph.zoom(-0.2) // 将画布缩放级别减少 0.2
graph.zoomTo(1.2) // 将画布缩放级别设置为 1.2
// 将画布中元素缩小或者放大一定级别,让画布正好容纳所有元素,可以通过 maxScale 配置最大缩放级别
graph.zoomToFit({ maxScale: 1 })
graph.centerContent() // 将画布中元素居中展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/320875.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看板表格样式,去掉element表格背景

<div class"ml-20"><el-input v-model.trim"queryParams.wipOrderNo" size"small" clearable style"width:150px" placeholder"请输入工单号" /><el-select class"ml-20" v-model"queryParam…

QT的坐标系统,回收机制、菜单栏,工具栏,状态栏,对话框及资源文件

QT的坐标系统&#xff0c;回收机制、菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;对话框及资源文件 文章目录 QT的坐标系统&#xff0c;回收机制、菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;对话框及资源文件1、QT的坐标系统&#xff1f;2、对象模型…

C#: 和时间相关,延时、获取系统时间、时间格式转换、定时器 等

说明&#xff1a;本文记录C# 和时间相关&#xff0c;延时、获取系统时间、时间格式转换、定时器 等&#xff0c;应用和代码。 1.延时函数 System.Threading.Thread.Sleep(20); //毫秒 1.1 主线程不卡延时函数 /* 主线程不卡延时函数 */public static void Delay_ms(int mil…

利用阿里云的尖端数据库解决方案增强游戏数据管理

在快节奏和动态的游戏世界中&#xff0c;对于努力为玩家提供无缝体验的公司来说&#xff0c;管理大量数据是一项关键挑战。阿里云是亚太地区的主要参与者&#xff0c;也是全球公认的运营数据库管理系统领导者&#xff0c;提供量身定制的创新解决方案&#xff0c;以应对游戏公司…

服务器为什么大多用 Linux?

服务器为什么大多用 Linux&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#…

APP自动化测试工具:八款推荐解析

uiautomator2 github地址&#xff1a;github.com/openatx/uia… UiAutomator 是 Google 提供的用来做安卓自动化测试的一个 Java 库&#xff0c;基于 Accessibility 服务。功能很强&#xff0c;可以对第三方 App 进行测试&#xff0c;获取屏幕上任意一个 APP 的任意一个控件属…

imgaug库指南(二):从入门到精通的【图像增强】之旅

文章目录 引言前期回顾代码示例小结结尾 引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应…

【Redux】自己动手实现redux和react-redux

1. React提供context的作用 在class组件的世界里&#xff0c;如果后代组件共享某些状态&#xff0c;比如主题色、语言键&#xff0c;则需要将这些状态提升到根组件&#xff0c;以props的方式从根组件向后代组件一层一层传递&#xff0c;这样则需要在每层写props.someData&#…

【如何选择Mysql服务器的CPU核数及内存大小】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

提升代码托管,助力大数据学习!Git学习网站等你来挑战!

介绍&#xff1a;Git是一个开源的分布式版本控制系统&#xff0c;可以高效地处理各种规模项目的版本管理。它是Linus Torvalds为了帮助管理Linux内核开发而开发的开放源码版本控制软件。在Git中&#xff0c;你可以掌握工作区、暂存区和版本库等核心概念&#xff0c;并学会使用常…

VSCode远程连接centos

1 下载remote -ssh插件 2 在上方打开命令面板&#xff0c;输入>,再输入ssh&#xff0c;选择设置 Remote-SSH:Settings 那行 3 勾选下面这个选项 4 点击加号旁边的那个齿轮&#xff0c;选择.ssh\config ,配置连接信息&#xff0c;保存好后&#xff0c;刷新。 4 连接centos,然…

Spring Boot 完善订单【五】集成接入支付宝沙箱支付

1.1.什么是沙箱支付 支付宝沙箱支付&#xff08;Alipay Sandbox Payment&#xff09;是支付宝提供的一个模拟支付环境&#xff0c;用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户&#xff0c;而沙箱环境则提…