2011-12-01 7 views
22

내부에 많은 요소가있는 SVG 요소가 있습니다. SVG 요소에는보기 상자가 있으므로 확대/축소 버튼을 누르면 요소가 더 크게 또는 더 작게 표시됩니다. 잘 작동합니다. 이제 문제는 요소가 부모 SVG 요소를 오버플로 할 때 아무 ScrollBars도 나타나지 않는다는 것입니다.SVG에서 스크롤 막대를 얻는 방법?

예 :

<div width="100%" height="100%"> 
<svg height="100%" width="100%" style="overflow-x: auto; overflow-y: auto; "viewBox="0 0 793 1122"> 
<g> 
... 
<line y2="44.9792mm" y1="44.9792mm" x1="197.203mm" x2="12.7028mm"></line> 
<line y2="44.9792mm" y1="44.9792mm" x1="197.203mm" x2="12.7028mm"></line> 
<text x="43.4516mm" y="52.9167mm" style="font-size: 11pt;">S</text> 
<rect x="0" width="210mm" y="0" height="297mm"></rect> 
... 
</g> 
</svg> 
</div> 

//here I set the viewbox after clicking the zoomOut-Button 
float width = svg.getViewBox().getBaseVal().getWidth(); 
float height = svg.getViewBox().getBaseVal().getHeight(); 

svg.getViewBox().getBaseVal().setHeight((float) (height/0.9)); 
svg.getViewBox().getBaseVal().setWidth((float) (width/0.9)); 

누군가가 나를 도울 수 있습니까? 오버 플로우 속성을 svg 및 div 태그에도 넣습니다. 작동하지 않습니다.

+1

나는 며칠 전이 페이지에 결국 방법을 알고 있지만 살펴하지 마십시오 : HTTP : //www.carto

예를 들어, 다음과 같은 CSS를 이용하여이 jsfiddle 참조 .net/svg/gui/scrollbar/도움이 될 수도 있습니다. – jValdron

+0

이 예제를 알고 있지만 html/css 기본 스크롤바가 아닌 svg/js를 사용하여 자체 스크롤 막대를 만듭니다. – snapple

답변

4

SVG 지점의 일부는 화면에 맞게 확장 할 수 있습니다. 그러나 설명하는 것과 같은 것을 얻고 싶다면 widthheightsvg 요소로 명시 적으로 설정해야한다고 생각합니다. 예를 들어 http://jsfiddle.net/qTFxJ/13/과 같이 viewBox 크기와 일치하도록 widthheight을 픽셀 단위로 설정합니다.

+0

감사. 코드를 업데이트했지만 지금은 나아지지 않습니다. 코드는 다음과 같습니다. http://jsfiddle.net/qTFxJ/17/. – snapple

+0

나는 당신이 낫지 않음을 의미하는 것이 확실하지 않습니다. 스크롤 바가 있습니다. 원하는 바입니다. 나는 당신의 마지막 "모습"이 무엇을 해야할지 모르겠다. 당신의 예가 svg 요소의 width/height를 갖고 있지 않다는 사실을 광산처럼 viewBox와 동일한 숫자로 설정했다. 나는 그것이 당신이 예상 한 것처럼 보이지 않는 이유인지 여부를 모르겠습니다. – ScottS

+0

좋아, 글쎄 내 문제를 다시 설명하려고 노력한다. 예 : http://jsfiddle.net/qTFxJ/18/ 고정 폭 및 높이 (400px)의 svg 요소가 있습니다. 또한 svg 요소 내부의 요소를 더 크게 또는 더 작게 만드는 뷰 박스가 있습니다. 이 예제에서 rect의 width/height는 400px이고 x/y 좌표는 40px입니다. 너는 rect를 완전하게 볼 수 없다. 이제 svg 요소에서 스크롤바를 가져 와서 rect를 완전히 볼 수있게하려고합니다. – snapple

28

div보다 SVG 요소를 크게 만들고 div를 사용하여 스크롤을 사용하여 오버플로를 처리하도록하십시오.

div#container { 
    height: 400px; 
    width: 400px; 
    border:2px solid #000; 
    overflow: scroll; 
} 
svg#sky { 
    height: 100px; 
    width: 1100px; 
    border:1px dotted #ccc; 
    background-color: #ccc; 
} 
+0

친애하는 Akhilesh에게, 여기에 답변의 핵심 부분을 포함시키고 참조 용 링크를 제공하는 것이 바람직합니다 (http://meta.stackexchange.com/q/8259). – osyan

+0

@Akhilesh 너는 내 하루를 보냈다 !!! 대단한 –

관련 문제