细胞景观.js "e.originalEvent.x"在浏览器上具有不同的行为



我正在尝试使用cytoscape.js构建一个交叉平台工具,wich包括移动设备,但是当使用" TAP"函数添加节点时,我会面临一些问题:

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
        }
    }
});

在Windows 7(v.32)的Chrome上,也可以在Safari上工作。

在IE 9上,该节点比我们单击的点(?!)

插入约30px和5px的节点。

但是,在Firefox(v.26)和Safari上,iOS不起作用,它是在画布的左上角放置的节点。Firefox Debug说" Originalevent.x"one_answers" Originalevent.y"属性是不确定的

"e.originalEvent.x: undefined"
"offset.left: 8"
"e.originalEvent.y: undefined"
"offset.top: 55.66667175292969"

那么,这个属性是否过时?如果是这样,改进此代码的最佳方法应该是什么?

预先感谢。

编辑:几乎已经解决,注意到使用e.originalEvent.pageXe.originalEvent.pageY改为在所有桌面浏览器上效果很好,并且在Windows Phone 8,上,> in ios:(

尽管cytoscape.js中的事件类似于jQuery事件,但它们不是jQuery事件。诸如pageX之类的属性可通过e.originalEvent获得,尽管它们尚未标准化为e。在即将到来的v2.1(或者在存储库中的make zip)中,已使用e.cyPositione.cyRenderedPosition更新事件。这些值分别提供了模型位置并渲染(在屏幕上,相对于CY.JS实例)位置。

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

最新更新