jtopo的项目实战(七)

7 篇文章 1 订阅
4 篇文章 0 订阅

话接上回,继续实现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(),这样一来可以解决点击图标后没有反应的问题。这里只演示了节点右键菜单的代码处理,其他画布的右键菜单和连线的右键菜单也是一样需要处理的,办法都是一样,博主就不重复讲解了。

 

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不脱发的牧码人

你的鼓励将是我前进的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值