2012-11-29 55 views
12

Tôi đang cố gắng sử dụng ViewBox & preserveAspectRatio để tự động điều chỉnh d3.svg.arc tôi khi kích thước cửa sổ đã thay đổi ...Sử dụng ViewBox để thay đổi kích thước svg tùy thuộc vào kích thước cửa sổ

var svg = d3.select("#chart").append("svg") 
    .append("g") 
    .attr("viewBox", "0 0 700 500") 
    .attr("preserveAspectRatio", "xMinYMin meet") 
    .attr("transform", "translate(" + r + "," + r +") rotate(180) scale(-1, -1)"); 

Tôi một chút bối rối tại sao nó không hoạt động chút nào - Tôi cũng đã cố gắng thiết lập bảo toàn thành "none" & xóa bất kỳ lề đã đặt nào mà tôi có. nhưng vẫn không có may mắn - bất kỳ trợ giúp hoặc lời khuyên nào sẽ được đánh giá cao.

Dưới đây là một ví dụ: http://jsfiddle.net/xwZjN/53/

Trả lời

23

Bạn đang áp dụng viewBoxpreserveAspectRatio tới phần tử g, họ cần phải được áp dụng cho các svg yếu tố:

var svg = d3.select("#chart").append("svg") 
    .attr("viewBox", "0 0 700 500") 
    .attr("preserveAspectRatio", "xMinYMin meet") 
    .append("g") 
    .attr("transform", "translate(" + r + "," + r +") rotate(180) scale(-1, -1)"); 
+0

Cảm ơn vì điều đó. Nhưng thú vị khi tôi đã áp dụng câu trả lời của bạn vòng cung của tôi dường như đi vào góc - Tôi thay đổi dịch x & y, nhưng nó không hoạt động. Tuy nhiên, nếu tôi làm điều này - http://jsfiddle.net/xwZjN/54/ có vẻ như hoạt động. Có lý do gì không? – Jose

+3

Bởi vì biến 'svg' của bạn thực sự chứa phần tử' g', không phải là SVG. Tuy nhiên, nhìn thấy các ví dụ D3 có vẻ như quy ước là đặt tên cho cấp cơ sở 'g' bằng biến' svg', do đó bạn có quyền (trả lời được cập nhật). – Duopixel

+0

cảm ơn lời giải thích! – Jose

-1

bạn có thể nhận được kích thước của cửa sổ và thiết lập tỷ lệ khung hình cho svg. Tôi đã trả lời một câu hỏi tương tự.
My answer

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