为什么智能手机的D3触摸事件无法正常工作?

时间:2018-12-12 11:42:13

标签: javascript d3.js events

我为可折叠树编写了代码,该树在桌面屏幕上运行良好。我单击该节点,然后将该节点扩展到另一个子节点,依此类推。当我将鼠标悬停在节点上时,它正在正确拖动。

但是,当我在Android或iphone等设备上打开树时,它无法正常工作。点击事件正常运行。通过单击该节点,它正在扩展,但是当我要拖动该节点时,它并没有拖动。

当我点击以将节点保留在移动设备上时,该节点的文本被选中,这不是我想要的。

我使用了d3.js提供的touchstart,touchend事件。

我的手机代码如下:-

   if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
                var dragMobile = function(d) {
                    // d3.event.stopPropagation();
                    svg.on("touchstart", function() {
                        d3.event.stopPropagation();
                        var m = d3.touches(svg.node());
                        moveMobile(d, parseInt(m[0]) - parseInt(d.y), parseInt(m[0][1]) - parseInt(d.x));
                        link.attr("d", diagonal);
                        node.attr("transform", function(d) { return "translate(" + [d.y, d.x] + ")"; });
                    })
                    .on("touchend", function() {
                        svg.on("touchstart", null);
                    });
                };

...
var node = svg.selectAll("g.node")
                .data(nodes, function(d) { return d.id || (d.id = ++i); })
                .on("touchstart", dragMobile);

...

var nodeEnter = node.enter().append("g")
.on("click", click)
                .on("touchstart", dragMobile);

我的移动功能:-

function moveMobile(root, xOffset, yOffset) {
            root.x += yOffset;
            root.y += xOffset;
            if (root.children) {
                root.children.forEach(function(d) { move(d, xOffset, yOffset); });
            }
        };

0 个答案:

没有答案