Javascript cytoscape.js“;e、 OriginaleEvent.x“;在浏览器上有不同的行为
我正在尝试使用cytoscape.js构建一个跨平台工具,其中包括移动设备,但在使用“点击”功能添加节点时,我遇到了一些问题: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
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。我非常感谢你的出色工作。祝贺你,继续前进,我确信这是正确的方式。