jtopo的项目实战(七)

article/2025/8/15 2:59:13

话接上回,继续实现jtopo本身不具有的一些功能,有讲的不对的地方,欢迎大家在评论区留言提出,博主基本每天在线,看到都会及时回复的,我们一起进步,奥利给,还有,码字不易,如果觉得博主写的不错的欢迎打赏哈!

8.给右键菜单添加图标

jtopo本身自带有右键菜单,但是没有图标,还是挺难看的,应项目需要,决定给jtopo增加右键菜单的图标,看着很简单,其实还是有一些小故事的,老规矩,先看效果图,再听我娓娓道来。

 

 

 

起先想着直接用layui的字体图标,因为着实方便呀,每个小菜单前面加一行代码就搞定了,例如:

    

<div class="fa fa-search-minus menu-item" onMouseMove="this.style.backgroundColor='#c5e7f6'" onMouseOut="this.style.backgroundColor=''"><i class="layui-icon">&#xe60c;</i>                               <span>缩小(Shift-)</span></div>

    

但是后来发现行不通,主要是因为layui的的字体图标就那么一百来个,很多想要的图标都没有,自己又懒得去按照阿里矢量图标的生成办法搞一些需要的图标

怎么搞呢?还是有办法的,我们不用layui的字体图标了,直接用阿里的矢量图标。首先打开阿里矢量图库,找到我们喜欢的图标,点击右下角的复制svg代码,这样就复制到了该图标的svg代码

 

 

再粘贴到我们想要的标签旁边就ok了

 

上图中红框圈起来的部分都是我复制的svg代码,这样做的好处是改动量最小,不用下载图片,不用再增加其他的HTML标签,接下来我们再调整一下图标的大小和颜色,使之和我们的标签同样的样式:

.icon { width: 1.3em; height: 1.3em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; color: rgb(115,115,115);}

最后再设置下右键菜单的边距,下划线超出部分隐藏:

.right-click-menu {position: absolute;width: 180px;display: none;background-color: #FFFFFF;border: 1px solid #b7c8f6;overflow: hidden;}.menu-item {/* padding-left: 5px; */width: 100%;font-size: 18px;height: 24px;line-height: 24px;text-align: left;border-bottom: 1px dotted #cccccc;padding: 0px 6px;cursor: pointer;}

 

好了,到此整个样式出来了,看起来还像模像样,但是……点击右键菜单的时候,好像右键菜单不大好使了,哈哈,该隐藏的时候不隐藏,该出来的时候不出来,什么原因导致的呢?细心的童鞋大概一猜就知道了,jtopo的右键菜单和功能实现是通过菜单名字去匹配的,可是我们加了图标,这样一来,匹配到的名称就和之前的不一样了,前边多出了svg的部分,好吧,在jtopo面前,我们始终奉行的是鬼挡杀鬼,佛挡杀佛,我们不妨先看看右键菜单的实现逻辑。节点、连线和画布的右键菜单都是在TopologyEditor方法里定义并挂载的,如图:

 

 

而真正的实现是在菜单初始化函数里,有这样一行代码要注意 let text = $.trim($(event.target).text())

 

 

这样代码在我们添加图标之前是没有问题的,但是现在有图标了,如果鼠标点击的正好是svg或者path,这里拿到的text就会是空值,这就导致了点击后没有反应,菜单失灵。好了,找到了问题的症结,就知道怎么改了,我们的目标是让鼠标点击后可以拿到点击处的“动作值”,这行代码我们稍加改动既可。

let text = $.trim($(event.target).text()||$(event.target).parent().text())if ($(event.target).prop("tagName") == "path") {text = $.trim($(event.target).text()||$(event.target).parent().parent().text())}

 

首先获取自身的text再和父节点的text做或运算拿到有效的text值,如果event节点正好是path,那么这里的text还会是空,那我们再强求一次parent(),这样一来可以解决点击图标后没有反应的问题。这里只演示了节点右键菜单的代码处理,其他画布的右键菜单和连线的右键菜单也是一样需要处理的,办法都是一样,博主就不重复讲解了。

 

最后,博主有一个小小的心愿,就是希望大家点一下下方的点赞、分享和收藏,博主希望大家都支持下,后期有好的东西我会继续分享给大家。

 


http://chatgpt.dhexx.cn/article/iEBBOiQO.shtml

相关文章

关于vue3.0项目引入jtopo出现的各种问题汇总

jtopo官网demo网址&#xff1a;http://www.jtopo.com/demo.html 最近的项目需要用到jtopo&#xff0c;关于jtopo的引入&#xff0c;之前自己也都尝试过&#xff0c;没想到这次引入会出现这么多问题&#xff0c;所以大概总结一下 1、借用同事以前的经验来引入 npm install jto…

JTopo 框架教程之一:初始JTopo 框架

JTopo 是什么&#xff1f; JTopo&#xff08;Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。jTopo关注于数据的图形展示&#xff0c;它是面向开发人员的&#xff0c;需要进行二次开发。使用jTopo很简单&#xff0c;可以快速创建一…

jtopo的项目实战(一)

前言 初识jtopo是因为项目中需要一个能够动态绘制网络拓扑图的插件&#xff0c;不但能画出基本的网络拓扑结构&#xff0c;还要能够标识出网络设备的类型以及端口设置&#xff0c;甚至是网络连线的流量信息等&#xff0c;基于这个需求查找了很多资料&#xff0c;初步选中了几款…

jtopo的项目实战(二)

话接上回&#xff0c;继续实现jtopo本身不具有的一些功能&#xff0c;有讲的不对的地方&#xff0c;欢迎大家留言提出&#xff0c;我们一起进步&#xff0c;奥利给&#xff0c;还有&#xff0c;码字不易&#xff0c;如果觉得博主写的不错的欢迎打赏哈&#xff01; 2.美化节点之…

vue、jtopo绘制鱼骨图

效果如下图所示&#xff1a; 一、文件目录结构&#xff1a; 二、绘制png的鱼头、鱼尾图片 fish_head.png&#xff1a; fish_tail.png&#xff1a; 三、下载js文件 jquery、jtopo请到官网下载。 四、编写鱼骨图核心文件&#xff1a;MakFishBone.js let MakFishBo…

通过JTopo.js在网页绘制网络拓扑图

项目中遇到要在网页中绘制网络拓扑图的需求&#xff0c;要求节点具备点击、拖拽、缩放等交互功能&#xff0c;并且可以显示/隐藏详细信息&#xff0c;数据是设备实时上报来的。 综上&#xff0c;用画拓扑图的工具画一张固定的图片偷懒显然是不行的&#xff0c;最好是找到一个封…

JTopo添加动态连线

效果如下 先在 JTopo 的 link 原型上定义一个方法 window.requestAnimationFrame window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame JTopo.Link.prototype.drawanimepic functi…

JTopo + Vue 实现自定义拖拽流程图

JTopo Vue 实现自定义拖拽流程图 进入体验效果 进入github 市场上做流程图的插件比较多&#xff0c;这里介绍一种基于canvas编写的js插件&#xff0c;结合vue框架做出精美的流程图 首先搭建vue框架&#xff0c;这里就不做介绍&#xff0c;由于jtopo官方demo里用到了jquery&am…

jtopo连线绘制脉冲动画效果

随着需求的日益精细化&#xff0c;人们越来越多的关注到了画面的美观&#xff0c;单纯的节点间连线已经不满足人们的审美观念了&#xff0c;那么能不能让节点间的连线动起来呢&#xff1f;答案是可以的&#xff0c;老规矩&#xff0c;先上图&#xff0c;再说怎么实现。 同样&am…

jTopo入门 简单实现拓扑图

最近项目中需要绘制拓扑图&#xff0c;于是研究了下绘制拓扑图的组件&#xff0c;jtopo是一款比较简单易上手的开发工具包&#xff0c;分享给大家。 jtopo特点 1、完全基于HTML5 Canvas开发&#xff0c;API平易近人、几乎简单到了极致。 2、不依赖任何其他库、执行仅需一个Ca…

jtopo 实现一键布局

最近很忙、也很懒&#xff0c;一堆烦心事&#xff0c;jtopo后面不准备再深究了&#xff0c;本身东西也不多&#xff0c;做出的新功能&#xff0c;新特效也都写到博客中来了&#xff0c;今天给大家分享最近研究的一个新技能——jtopo一键布局&#xff0c;写给大家、也写给自己。…

jtopo简单实例

原贴地址 http://cn-arthurs.iteye.com/blog/2009345 说明: jtopo是一个基于canvas的js拓扑图形组件.比canvasexpress容易多了. 可以方便地加点,加连线,加鼠标事件,拖曳. 号称跨浏览器,不过实际上不支持ie678,加上excanvas.js也没用,除非像canvasexpress那样使用chrome插件. …

Vue — jTopo

近期在Vue项目中使用jTopo来制作集群节点拓扑图&#xff0c;官网http://www.jtopo.com/ 使用vue-cli搭建的模块化开发项目&#xff0c;使用第三方库最好的方式就是通过npm install xxx安装&#xff0c;然后在项目 里import xxx来使用&#xff1b;但是在JTopo官网上并没有发现有…

【Vue引入JTopo及所遇到的问题】

Vue引入JTopo及所遇到的问题 前言一、方案选型二、使用步骤三、总结 前言 项目过程中总是会遇到稀奇古怪的需求&#xff0c;这不&#xff0c;咱老大又让我画一个系统拓扑图放在首页&#xff0c;要求部分数据需从后端获取&#xff0c;动态展示在页面上。对于一个后端人猿来说&a…

Vue+JTopo(一)

1.下载js jtopo 更新下载 (不知道为什么网站被封禁了……在这提供下我现在用的 jtopo-1.4.4_trial-esm-min.js) 链接&#xff1a;https://pan.baidu.com/s/18V1HKwAuxzWM19RD4axGOg 提取码&#xff1a;0304 2.引用 文件放在public/js文件夹下&#xff0c;在index.hml内引用。…

jTopo(一)

jTopo(一) 一、jTopo是什么 jTopo&#xff08;Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。 jTopo关注于数据的图形展示&#xff0c;它是面向开发人员的&#xff0c;需要进行二次开发。 使用jTopo很简单&#xff0c;可以快速…

windows10下安装MSYS2+MinGW64

1.下载msys2&#xff0c;官方地址&#xff1a;http://www.msys2.org/&#xff0c;这里选择64位的安装器 2.安装完成之后&#xff0c;先别启动msys2&#xff0c;在 安装根目录/etc/pacman.d/ 下找到mirrorlist.mingw32、mirrorlist.mingw64和mirrorlist.msys并进行修改。 mirr…

Win10 下安装 MSYS2

什么是 MSYS2 MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX 兼容性层&#xff09; 和 MinGW-w64&#xff08;从"MinGW-生成"&#xff09;基础上…

【msys2】使用msys2下载工具的旧版本

背景 苯人在计组实验中使用了msys2来安装verilator工具&#xff0c;结果最新版本的verilator有bug&#xff0c;几经探索找到了利用msys2下载旧版本工具的方法&#xff08;还可以将现有工具更新为旧版本&#xff09; 步骤 现以安装旧版本的verilator为例讲解方法。 这是msys…

【Window环境下使用MSYS2搭建CMake + MinGW环境】

目录标题 安装CMakecmake 测试 MSYS2下载MSYS2安装MSYS2修改软件下载源 MSYS2下安装MinGW配置MinGW配置到环境变量 hello world测试 安装CMake Cmake下载地址:https://cmake.org/download/,下一个windows压缩包就好了&#xff0c;因为我比较喜欢自己来配置&#xff0c;免得不知…