Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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“;e、 OriginaleEvent.x“;在浏览器上有不同的行为_Javascript_Jquery_Cytoscape.js - Fatal编程技术网

Javascript cytoscape.js“;e、 OriginaleEvent.x“;在浏览器上有不同的行为

Javascript cytoscape.js“;e、 OriginaleEvent.x“;在浏览器上有不同的行为,javascript,jquery,cytoscape.js,Javascript,Jquery,Cytoscape.js,我正在尝试使用cytoscape.js构建一个跨平台工具,其中包括移动设备,但在使用“点击”功能添加节点时,我遇到了一些问题: cy.on('tap', function(e) { if(e.cyTarget === cy) { if($("input:radio[id=btnAddNode]")[0].checked) { var idNum = cy.nodes().size(), setID = idNum.toStr

我正在尝试使用cytoscape.js构建一个跨平台工具,其中包括移动设备,但在使用“点击”功能添加节点时,我遇到了一些问题:

cy.on('tap', function(e) {
    if(e.cyTarget === cy) {
        if($("input:radio[id=btnAddNode]")[0].checked) {
            var idNum = cy.nodes().size(),
            setID = idNum.toString(),
            offset = $cy.offset(),
            position = {
                x: e.originalEvent.x - offset.left,
                y: e.originalEvent.y - offset.top
            };
            console.log("e.originalEvent.x: " + e.originalEvent.x);
            console.log("offset.left: " + offset.left);
            console.log("e.originalEvent.y: " + e.originalEvent.y);
            console.log("offset.top: " + offset.top);
            cy.add([{
                group: "nodes",
                data: {
                    id: "n" + setID
                },
                renderedPosition: {
                    x: position.x,
                    y: position.y
                },
            }]);                    
        } else {
        //show node data
        }
    }
});
在Chrome for Windows 7(v.32)和Safari上,它的工作情况与预期一致

在IE9上,它插入的节点比我们单击的点高30像素,左5像素(?)

但在Firefox(v.26)和SafariforiOS上,它不起作用,它将节点放在画布的左上角。Firefox调试说“originalEvent.x”和“originalEvent.y”属性未定义

"e.originalEvent.x: undefined"
"offset.left: 8"
"e.originalEvent.y: undefined"
"offset.top: 55.66667175292969"
那么,这个属性过时了吗?如果是这样,那么改进代码的最佳方法是什么

提前谢谢


编辑:几乎解决了,注意到使用
e.originalEvent.pageX
e.originalEvent.pageY
在所有桌面浏览器和Windows Phone 8上运行良好,除了iOS上的:(

虽然Cytoscape.js中的事件类似于jQuery事件,但它们不是jQuery事件。类似于
pageX
的属性可通过
e.originalEvent
获得,尽管它们在即将到来的v2.1中没有标准化为
e
。(或者如果您在repo中
生成zip
),事件已更新为
e.cyPosition
e.cyrendedPosition
。这些值分别提供模型位置和渲染(在屏幕上,相对于cy.js实例)位置


还要注意的是,我认为即使使用jQuery事件,您的方法也无法在iOS等上工作,因为触摸事件没有标准化。
e.cyPosition
e.cyrendedPosition
确实支持触摸事件。

也许跨浏览器的差异是不应该使用的原因?@Bergi是的,也许。但我发现了使用
originalEvent.pageX
originalEvent.pageY
似乎是正确的方法,现在所有的浏览器都同样正确地识别它。感谢我链接的页面确实提到
e.pageX
e.pageY
(不需要
originalEvent
)是的,我看到了你的链接,但是用这种方式我得到了
e.pageX:undefined
!谢谢Max,我会看看v2.1。我非常感谢你的出色工作。祝贺你,继续前进,我确信这是正确的方式。