Javascript 如何创建Konva React关联菜单
据我所知,Konva没有一种简单/内置的方法来创建右键单击对象的上下文菜单。我正忙于一个需要使用上下文菜单的项目,所以我想我应该创建自己的上下文菜单 不用说,我对Konva还很陌生,所以我希望有人能有更多的经验来帮助我克服最后的障碍 我已经创建了一个沙箱,位于 这些要求是:Javascript 如何创建Konva React关联菜单,javascript,reactjs,contextmenu,konvajs,konvajs-reactjs,Javascript,Reactjs,Contextmenu,Konvajs,Konvajs Reactjs,据我所知,Konva没有一种简单/内置的方法来创建右键单击对象的上下文菜单。我正忙于一个需要使用上下文菜单的项目,所以我想我应该创建自己的上下文菜单 不用说,我对Konva还很陌生,所以我希望有人能有更多的经验来帮助我克服最后的障碍 我已经创建了一个沙箱,位于 这些要求是: 对象应该是可拖动的。(我从Konva沙箱复制了一个工作示例。) 右键单击对象时,对象应显示上下文菜单 上下文菜单应该是动态的,因此允许多个项目,每个项目在单击时执行自己的回调 选择后,应关闭关联菜单 到目前为止,我大部分都做
我将感谢任何帮助。提前谢谢。恐怕不是在react中,而是在plain JS中,但它为您必须做的一些事情提供了启示 单击粉色圆圈,然后选择选项2并单击子选项2 需要更多工作的领域:
- 通过JSON传递菜单配置数据
- 使添加回调成为类内的方法
- 在隐藏上添加一个超时,以允许抖动的鼠标指针
- 如何在用户鼠标悬停或单击其他选项时隐藏子菜单
- 添加显示和隐藏动画
//设置画布/舞台
var stage=new Konva.stage({container:'container1',宽度:600,高度:300});
//为一些示例形状添加一个图层
var layer=new Konva.layer({draggable:false});
阶段。添加(层);
//画一些形状。
var circle=new Konva.circle({x:80,y:80,半径:30,填充:'Magenta'});
图层。添加(圆圈);
var rect=new Konva.rect({x:80,y:80,宽度:60,高度:40,填充:“青色”});
层。添加(rect);
stage.draw();
//这就是“现在结束菜单”的乐趣所在
//我决定设置一个简单的JS对象来定义我的菜单结构——可以很容易地从JSON格式的异步接收。[家庭作业#1]
var menuData={选项:[
{key:'opt1',text:'Option 1',callBack:null},
{键:'opt2',文本:'Option 2',回调:null,
选项:[
{key:'opt2-1',text:'Sub 1',callBack:null},
{key:'opt2-2',text:'sub2',回调:null}
]
},
{key:'opt3',text:'Option 3',callBack:null},
{key:'opt4',text:'Option 4',callBack:null}
]};
//定义菜单“类”对象。
变量菜单=功能(菜单数据){
var optHeight=20;//两个维度常量。
var optWidth=100;
变量颜色=['白色','金色'];
this.options={};//准备一个可由key访问的关联列表-将key作为名称放入形状中,以便我们可以从click事件获取此条目
this.menuGroup=new Konva.Group({});//准备一个画布组来保存此级别的选项rects。使其可通过此前缀从外部访问
var _this=this;//为this放置一个ref,以便稍后克服这种混淆。
//递归函数,用于添加菜单级别并指定其选项组件。
var addHost=function(menuData、hostGroup、level、pos){//params是级别、父组、级别计数器和偏移位置计数器的数据
var menuHost=new Konva.Group({visible:false});//创建一个画布组以包含新选项
添加(menuHost);//添加到父组
//对于此级别的每个选项
对于(变量i=0;i