我在移動設備上遇到D3(版本4)的問題,在完全同時觸摸兩個元素時,縮放功能似乎不起作用。我測試的唯一設備是iPhone 7(iOS 10.1.1),而且在移動Safari和Chrome瀏覽器應用程序中都存在問題。在兩次同時觸摸時D3縮放失敗
我創建了一個簡單的例子(下面),我可以重現這個問題,它只是在黃色背景上有兩個矩形。在我的iPhone:
- 如果我摸到他們在確切同時用兩個手指,變焦將不變化,因爲我除了和一起移動我的手指。
- 但是,如果觸摸是而不是正好在同一時間(即使稍微分開),縮放工作正常。
我是否錯過了導致這種行爲的東西?我試着尋找同樣的問題,找不到任何東西......但考慮到D3的流行,這肯定是我做錯了。
這對我的用戶造成了一個問題。很多時候,觸摸事件並不完全是同一時間,但觸摸事件通常會同時發生,而且它看起來像用戶像變焦被破壞或需要多次嘗試才能成功。非常令人沮喪。
var svg = d3.select('#svgLocation').append('svg')
\t .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一些調試代碼,迄今已縮小了問題倒在變焦touchstarted功能。在當變焦失敗的情況下,它確實看到兩個觸摸事件進來的...但由於某些原因,「G」的手勢沒有在第二次觸摸事件到達時填充touch0值。 – codinginthevoid