2014-11-03 7 views
0

Topojson 파일에서 마우스 오버로 전체 모양의 획을 변경하지 않는 개별 요소의 획을 변경하는 데 문제가 있습니다.Topojson 영역 내에서 획을 렌더링합니다. 전체 모양의 스타일을 변경하는 방법?

시각적 아마 최고 :

enter image description here

내가 마우스 오버에 같은 스트로크를받을 카운티 모양 영역에서 모든 경계 요소를 싶습니다. 대신, 나는 국경의 일부만 뇌졸중을 변경하는이 이상한 효과를 얻고 있습니다.

+0

이 때문에 Z-정렬의이다; 이 모양 위에 다른 모양이 생기고 뇌졸중의 일부를 덮고 있습니다. 이 문제를 해결하려면 항상 마우스 모양을 정면으로 이동해야합니다. SVG에서는 DOM 요소를 컨테이너의 마지막 자식으로 만들어야합니다. d3에서 그것을하는 방법은'selection.order()'를 사용하는 것과 관련이있다. – meetamit

+0

@meetamit 고마워. 그것은 매우 흥미 롭습니다. 강조 표시된 섹션이 순서대로 첫 번째로 오도록 모양을 어떻게 정렬합니까? –

답변

2

나는이 같은 솔루션을 사용하여 종료가, referenced here.

.on("mouseover", function(d,i) { 
    d3.select(this.parentNode.appendChild(this)).transition().duration(300) 
     .style({'stroke-opacity':1,'stroke':'#F00'}); 
}) 
1

그려진 도형이 모두 shapes이라는 데이터 바인딩 된 d3 선택 항목에 있다고 가정 해 봅시다 (일반적인 입력, 업데이트, 종료 흐름을 사용하여 만듭니다). 그렇다면이 같은 작업을해야합니다 :

shapes.on('mouseover', function(d, i) { 
    // d is the datum of the hovered shape 

    // data is all the data currently bound to shapes 
    var data = shapes.data(); 

    // this'll sort the data such that the hovered d is last in the array 
    data.sort(function(a,b) { return d3.ascending(a == d, b == d); }) 

    // now that the data is sorted, reorder the shapes to match 
    // the order within data. 
    shapes.data(data);// NOTE: there's a good chance this line is not necessary. Try taking it out. 
    shapes.order(); 
}); 
+0

그건 의미가 있습니다. 차이를 만든 것 같지 않아요, 두렵습니다. –

+0

흠, 확실하지 이유. 코드를 게시하거나 바이올린을 작성하지 않는 한 당신을 도울 수 없습니다. – meetamit

+0

실제로. 근무 시간 후에 나는 바이올린을 할 것이다. –