2017-11-28 4 views
1

관심 장소가 svg 원으로 표시된 대화식지도가 있습니다. 각 원에는 터치 시작 또는 마우스 다운 이벤트가 있고 뒤에있는 투명 사각형은 d3.zoom()에 바인딩되어 있으므로지도를 확대 할 수 있습니다! 당신이 요소를 검사한다면 여기까지 설정되어 :v3의 d3.js 확대/축소 : 한 손가락이 자식 요소 위에있을 때지도를 손가락으로 확대/축소

<div id="map"> 
    <svg> 
     <g><rect></rect></g> <!-- transparent rect bound to d3.zoom() --> 
     <g> 
      <circle></circle> <!-- places of interest with touchstart listeners --> 
      <circle></circle> 
      ... 
     </g> 
    </svg> 
</div> 
지금은 줌을 꼬집어 경우

하고, 줌 내 휴대 전화에 이상하게 작동합니다 내 지방 손가락 중 하나가 이러한 원 중 하나 될 일을 내가하지 않는 한 원은과 같이 터치 할 때마다 발생 줌을 방지 :

selection.append("circle").on("touchstart mousedown",function(d,i){ 
     d3.event.preventDefault(); // no zoom for you 
     // ... code to highlight circle or whatever 
    } 

이 방법을, 사용자가 실수로 원 또는 관심의 장소에 한 손가락으로 확대하는 경우, 원의 하이라이트와 줌이 취소됩니다. 동일한 토론에서 this 토론을 읽으면서 issue 66도 멋지게 설정하는 데 도움이되었습니다.

확대/축소시 사용자가 관심 장소를 피할 수 있도록 줌 기능이 작동합니다.

하지만 실제로하고 싶은 것은 다른 방법으로 설정하고 줌을 항상 최우선으로 생각하는 것입니다.

나는 원을 확대/축소 사각형 뒤에 배치하려고 시도했지만 물론 원이 더 이상 터치 이벤트를받지 못합니다. 관심 장소와 더 이상 상호 작용할 수없는 경우지도가 완벽하게 확대되므로 이는 불행한 일입니다.

나는 관심 장소를 내가 원하는 것보다 작게 만들어서 사용자가지도 만 확대 할 수있는 기회를 늘릴 수 있습니다. 물론 이것은 차선책입니다.

언젠가 나는 언젠가는 터치 이벤트에 대한 직관적 인 이해를 얻게 될 것이지만, 지금 당장은 내가 길을 잃을 때 어떻게 접근해야하는지 겸손하게 묻습니다. 내지도에 대해 터치시 줌을 우선 적용하는 방법에 대한 제안 사항에 크게 감사드립니다. 읽어 주셔서 감사합니다.

답변

0

이렇게 나에게 내 tumbleweed 배지가 있습니다. 캔버스를 사용하여 모든 서클을 제작하여이 문제를 해결했습니다. d3 확대/축소가 포함 된 캔버스 원이있는 svg지도입니다. d3 요소가 있고 한 손가락을 요소에 배치하고 다른 요소를지도에 배치하고 집게 확대를 시도하면 작동하지 않습니다. 캔버스와 포인터 추적을 사용하면이 문제를 해결할 수 있습니다.

완성 된지도 및 프로젝트입니다. https://pixelsandplans.com/live/flow/