Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cytoscape.js-Get";。打开(水龙头)";事件位置_Javascript_Events_Mouseevent_Mouse_Cytoscape.js - Fatal编程技术网

Javascript Cytoscape.js-Get";。打开(水龙头)";事件位置

Javascript Cytoscape.js-Get";。打开(水龙头)";事件位置,javascript,events,mouseevent,mouse,cytoscape.js,Javascript,Events,Mouseevent,Mouse,Cytoscape.js,如何获取轻触事件位置 在这里,我试图在点击上添加一个节点。。。但是我不知道如何获得传递到新节点的renderposition属性的特定坐标 cy.on('tap', function (e) { if (e.cyTarget === cy) { //var pos = $(this).position().left, //tried this, as jquery //posY = $(this).position

如何获取
轻触
事件位置

在这里,我试图在
点击
上添加一个节点。。。但是我不知道如何获得传递到新节点的
renderposition
属性的特定坐标

cy.on('tap', function (e) {
    if (e.cyTarget === cy) {                    
        //var pos = $(this).position().left,  //tried this, as jquery
        //posY = $(this).position().top;   //positioning without success        
        var idNum = cy.nodes().size();
        var setID = idNum.toString();
        cy.add([{
            group: "nodes",
            data: {
                id: "n" + setID
            },
            renderedPosition: {
                x: e.pageX, //- posX,
                y: e.pageY //- posY
            },
        }]);                        
    }    
});
使用相同的代码,但与
$('#cy')绑定。单击
函数,它可以工作。。。但是使用
cy.on('tap')
方式,事件
e
没有
pageX
pageY
属性,我也不能使用
$(this.position())函数获取元素位置

我真的更喜欢使用
tap
,因为我正在尝试为移动接口开发我的应用程序

提前谢谢

编辑:使用@darshanags观察,我这样解决:

var idNum = cy.nodes().size(),
    setID = idNum.toString(),
    offset = $("cy").offset(),
    position = {
        x: e.originalEvent.x - offset.left,
        y: e.originalEvent.y - offset.top
    };
cy.add([{
    group: "nodes",
    data: { id: "n" + setID },
    renderedPosition: {
        x: position.x,
        y: position.y
    },
    ...
}]);

您对的使用不正确,Cytoscape的
.position()
与jQuery的
position()
的工作方式有点不同:

获取位置并使用它:

var idNum = cy.nodes().size(),
    setID = idNum.toString(),
    position = {
        x: e.cyTarget.position("x"),
        y: e.cyTarget.position("y")
    };

cy.add([{
    group : "nodes",
    data : {
        id : "n" + setID
    },
    renderedPosition : {
        x : position.x,
        y : position.y
    }
}]);
文档:

我回答了这个问题,但在尝试实现这一点时遇到了这两个问题,所以我也将在这里发布

在cytoscape.js 3.2中,有以下方便功能:

cy.on("tap", function(e) {
    cy.add([{
        group: "nodes",
        id: "testid",
        renderedPosition: {
            x: e.renderedPosition.x,
            y: e.renderedPosition.y,
        },
    });
});
这最终相当于(假设您设置了
容器:$(“#cy container”)
):


非常感谢。我真的很感谢你的帮助,但不幸的是它没有起作用:
e.cyTarget.position
未定义的。它真的应该存在吗?如果是这样的话,我真的不知道还有什么地方我错了。不管怎样,我通过你的观察解决了这个问题。请参见编辑。非常感谢。注意:在2.1中,您将能够使用
e.cyPosition
e.cyprenderedposition
cy.on("tap", function(e) {
    let canvas = $("#cy-container").find("canvas").get(0);
    cy.add([{
        group: "nodes",
        id: "testid",
        renderedPosition: {
            x: e.originalEvent.pageX - $(canvas).offset().left,
            y: e.originalEvent.pageY - $(canvas).offset().top,
        },
    });
});