2011-12-01 20 views
22

Tôi có phần tử SVG với nhiều phần tử bên trong. Phần tử SVG có một hộp xem, vì vậy bạn có thể nhấn nút thu phóng và các phần tử xuất hiện lớn hơn hoặc nhỏ hơn. Hoạt động tốt. Bây giờ vấn đề là, khi các phần tử tràn phần tử SVG gốc không có thanh cuộn xuất hiện.Làm thế nào để có được ScrollBars trong SVG?

Ví dụ:

<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)); 

Ai đó có thể giúp tôi? Tôi đặt phần bù tràn vào svg và cũng có trong thẻ div. không hoạt động.

+1

Không biết làm thế nào tôi đã kết thúc trên trang này một vài ngày trước, nhưng hãy xem: http: //www.carto .net/svg/gui/scrollbar/có thể giúp đỡ – jValdron

+0

tôi biết ví dụ này, nhưng họ tạo thanh cuộn của riêng họ với svg/js và không phải thanh cuộn mặc định html/css. – snapple

Trả lời

4

Một phần của điểm SVG là để nó có thể mở rộng cho vừa với màn hình. Tuy nhiên, tôi nghĩ nếu bạn muốn nhận được một cái gì đó giống như những gì bạn đang mô tả, thì bạn cần đặt rõ ràng widthheight thành phần svg. Một cái gì đó như http://jsfiddle.net/qTFxJ/13/ nơi tôi đặt widthheight tính bằng pixel để khớp với kích thước viewBox của bạn.

+0

Cảm ơn. Tôi đã cập nhật mã nhưng bây giờ nó không còn tốt hơn nữa. Đây là mã: http://jsfiddle.net/qTFxJ/17/. – snapple

+0

Tôi không chắc chắn những gì bạn có nghĩa là không tốt hơn. Tôi thấy thanh cuộn, đó là những gì bạn muốn. Tôi không biết "cái nhìn" cuối cùng của bạn là gì. Tôi đã nhận thấy rằng ví dụ của bạn không có chiều rộng/chiều cao của phần tử svg được đặt thành các số giống như viewBox giống như tôi đã làm. Tôi không biết nếu đó là lý do tại sao bạn không nhìn như bạn mong đợi hay không. – ScottS

+0

Ok, tôi cũng cố mô tả lại vấn đề của mình. Ví dụ: http://jsfiddle.net/qTFxJ/18/ Tôi có phần tử svg với chiều rộng cố định và chiều cao (400px). Tôi cũng có một hộp xem để làm cho các phần tử bên trong phần tử svg lớn hơn hoặc nhỏ hơn. Trong ví dụ này, chiều rộng/chiều cao rects của tôi là 400px và tọa độ x/y là 40px. Soo bạn không thể nhìn thấy trực tràng hoàn toàn. Bây giờ tôi muốn lấy thanh cuộn trong phần tử svg để xem trực tiếp hoàn toàn. – snapple

28

Hãy thử làm cho phần tử SVG lớn hơn div và để div xử lý tràn bằng cách sử dụng cuộn.

Ví dụ, xem jsfiddle này, trong đó sử dụng css sau:

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

Kính gửi Akhilesh, [nó sẽ là thích hợp hơn] (http://meta.stackexchange.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. – osyan

+0

@Akhilesh bạn đã thực hiện một ngày của tôi !!! tuyệt vời –

Các vấn đề liên quan