View unanswered posts | View active topics It is currently 2019-10-19 1:21



Reply to topic  [ 7 posts ] 
 关于PopupMenu的问题 
Author Message
新手上路

Joined: 2019-02-22 13:42
Posts: 9
Post 关于PopupMenu的问题
有没有可以重写什么方法来支持左键菜单,现在好像限制为了右键,通过重写onMenuShowing的方法来判断event.button为0或2没啥用,还是只显示右键菜单


2019-03-04 14:54
Profile
新手上路

Joined: 2019-03-04 14:41
Posts: 15
Post Re: 关于PopupMenu的问题
关于 popupMenu 组件的构造函数的监听使用的 contextmenu 属性的事件名称(该事件默认当用户右击元素时将显示上下文菜单), 没有通过e.buttons 来判断是用的鼠标左键还是右键。如果希望使用左键网元来创建一个下拉列表的话,建议使用network 上加监听,然后创建那个下拉的div。


2019-03-04 19:00
Profile
新手上路

Joined: 2019-02-22 13:42
Posts: 9
Post Re: 关于PopupMenu的问题
liushun wrote:
关于 popupMenu 组件的构造函数的监听使用的 contextmenu 属性的事件名称(该事件默认当用户右击元素时将显示上下文菜单), 没有通过e.buttons 来判断是用的鼠标左键还是右键。如果希望使用左键网元来创建一个下拉列表的话,建议使用network 上加监听,然后创建那个下拉的div。



对,其实这个就是我理解需求问题,鬼需求写的不伦不类,现在是左键做别的操作,右键为菜单,所以这个没啥问题

不过右键菜单现在默认单选没问题,还需要一个多选菜单,请问多选的情况下如何做右键菜单


2019-03-04 19:31
Profile
新手上路

Joined: 2019-03-04 14:41
Posts: 15
Post Re: 关于PopupMenu的问题
不是太能理解你说的多选,请问是像这样,右键出现一级下拉框后,
Attachment:
1_1.png
1_1.png [ 5 KiB | Viewed 761 times ]
,要多项选中其中的内容,然后在触发生成二级下拉框或者就是直接操作网元。这样的需求吗。


2019-03-05 10:05
Profile
新手上路

Joined: 2019-02-22 13:42
Posts: 9
Post Re: 关于PopupMenu的问题
liushun wrote:
不是太能理解你说的多选,请问是像这样,右键出现一级下拉框后,
Attachment:
1_1.png
,要多项选中其中的内容,然后在触发生成二级下拉框或者就是直接操作网元。这样的需求吗。




不是,是说,canvas上有比如5个node节点,单独点击节点出现的右键菜单和全部框选时候的菜单不同

现在就是如何判断是弹出选中了一个node的,还是通过框选,或者按住shift键多选了的菜单


2019-03-05 16:37
Profile
新手上路

Joined: 2019-03-04 14:41
Posts: 15
Post Re: 关于PopupMenu的问题
你好,根据你说的需求,我做了个小例子,框选多个网元后,点击画布生成下拉框(对所以选中网元填充红颜色);
Attachment:
11.gif
11.gif [ 66.04 KiB | Viewed 746 times ]

思路:
1 先通过network 上的选中事件监听,存上所以选中的网元。
Code:
var prevDatas = null;
            network.getSelectionModel().addSelectionChangeListener(function(e){
                console.log(e)
                if(e.kind === "clear"){
                    prevDatas = e.datas;
                }
            })   

2 添加需要的下拉框内容
Code:
popupMenu.setMenuItems([{
              label: "multiple",
              group: "multiple"
            },
            ...
]

3 显示的下拉框的内容
Code:
popupMenu.isVisible = function (menuItem) {
                if (magnifyInteraction) {
                    return menuItem.group === 'Magnify';
                } else {
                    if (lastData) {
                        if (lastData instanceof twaver.SubNetwork && menuItem.group === 'SubNetwork') {
                            return true;
                        }
                        if (lastData instanceof twaver.Group && menuItem.group === 'Group') {
                            return true;
                        }
                        if (lastData instanceof twaver.Link && menuItem.group === 'Link') {
                            return true;
                        }
                        return menuItem.group === 'Element';
                    } else if(prevDatas instanceof twaver.List && prevDatas.size()>0) {
                        return menuItem.group === 'multiple';
                    }else{
                        return menuItem.group === 'none';
                    }
                }
            };

4 点击选项后的回调处理
Code:
popupMenu.onAction = function (menuItem) {
                if(menuItem.label === "multiple"){
                    console.log(prevDatas)
                    prevDatas.forEach((node) => {
                        // node.s("whole.alpha", 0.2);
                        node.s("vector.fill.color", "red");
                    })
                    prevDatas = null;
                }
            };


2019-03-05 17:49
Profile
新手上路

Joined: 2019-02-22 13:42
Posts: 9
Post Re: 关于PopupMenu的问题
感谢,我参考一下!


2019-03-08 17:06
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 7 posts ] 

Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron