【发布时间】:2016-11-26 07:57:20
【问题描述】:
我在移动设备上使用 D3(第 4 版)时遇到问题,当同时触摸两个元素时,缩放功能似乎不起作用。我测试过的唯一设备是 iPhone 7 (iOS 10.1.1),移动 Safari 和 Chrome 浏览器应用程序都存在问题。
我创建了一个简单的示例(如下),我可以用它来重现这个问题,它只有两个黄色背景上的矩形。在我的 iPhone 上:
- 如果我用两根手指准确同时触摸它们,当我将手指分开和合拢时,缩放不会改变。
- 但如果触摸不完全在同一时间(甚至稍微分开),则缩放工作正常。
我是否遗漏了导致这种行为的某些东西?我尝试搜索其他有相同问题的人,但找不到任何东西……但鉴于 D3 的受欢迎程度,这一定是我做错了。
这给我的用户带来了问题。很多时候,它的工作原理是触摸事件并不完全在同一时间……但触摸通常是同时发生的,并且在用户看来,缩放被破坏或需要多次尝试才能成功。非常沮丧。
var svg = d3.select('#svgLocation').append('svg')
.attr('style', 'width:300px;height:300px;background-color:yellow;');
var grp = svg.append("g");
grp.append("path").attr('d','M25,25 275,25 275,125 25,125Z');
grp.append("path").attr('d','M25,175 275,175 275,275 25,275Z');
var zoom = d3.zoom()
.scaleExtent([1, 10])
.on("zoom", function() { grp.attr("transform", d3.event.transform) });
svg.call(zoom);
#svgLocation {
width:100%;
height:100%;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="http://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<div id="svgLocation"></div>
</body>
</html>
【问题讨论】:
-
我在 d3.v4.js 中添加了一些调试代码,到目前为止已将问题缩小到缩放触摸启动功能。在缩放失败的情况下,它确实看到了两个触摸事件......但由于某种原因,“g”手势在第二个触摸事件到达时没有填充 touch0 值。