У меня проблема с 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 и до сих пор сузил проблему до функции масштабирования с сенсорным нажатием. В случаях, когда масштабирование не работает, оно видит два события касания, входящие в ... но по какой-либо причине жест g не имеет значения touch0, заполняемого во время поступления второго события касания. – codinginthevoid