팬 및 확대/축소 기능이있는 토폴로지 맵이 있습니다. 국가를 클릭D3 - 수동 확대/축소 및 원점 이동 후 정확한 축척 및 원점 변환 방법
, 나는이 사용 국가로 패닝/줌 해요 :
if (this.active === d) return
var g = this.vis.select('g')
g.selectAll(".active").classed("active", false)
d3.select(path).classed('active', active = d)
var b = this.path.bounds(d);
g.transition().duration(750).attr("transform","translate(" +
this.proj.translate() + ")" +
"scale(" + .95/Math.max((b[1][0] - b[0][0])/this.options.width, (b[1][1] - b[0][1])/this.options.height) + ")" +
"translate(" + -(b[1][0] + b[0][0])/2 + "," + -(b[1][1] + b[0][1])/2 + ")");
g.selectAll('path')
.style("stroke-width", 1/this.zoom.scale())
을 그러나, 나는 팬을 끌어 계속하면,지도 바보는 다시 초기 위치에 클릭이 발생하기 전에 , 패닝하기 전에. 다른 말로
this.zoom = d3.behavior.zoom().on('zoom', redraw)
function redraw() {
console.log('redraw')
_this.vis.select('g').attr("transform","translate(" +
d3.event.translate.join(",") + ")scale(" + d3.event.scale + ")")
_this.vis.select('g').selectAll('path')
.style("stroke-width", 1/_this.zoom.scale())
}
this.vis.call(this.zoom)
, 클릭 한 다음 다시 그리기 기능으로 드래그하여 지점을 확대 한 후, 다시 그리기가에서 계속 올바른 번역 + 스케일을 선택하지 않습니다 코드 줌은 여기/패닝합니다.
'd3.select (경로) ('활성'.classed, 활성 = d)''경로'의 모든 것에'active' 클래스를 설정합니다. 이것은 아마도 문제를 일으키지 않을 것이다. (다른 곳에서'active' 경로에 초점을 맞추는 코드가 없다면), 나는'=='을 의미한다고 생각한다. –
경로는 클릭 한 국가 경로입니다. 활성 클래스에는 코드가 없습니다. – bcm
나는이 질문에 더 많은 관심을 갖기 위해 내 대답을 제거했다. 나는 그 문제를 완전히 이해한다고 생각하지 않는다. 문제가있는 작업 예제를 추가하면 도움이 될 수 있습니다. –