0
Q
縮放D3裁剪問題
A
回答
0
我終於能夠解決這個問題。要點是:
- 使用適當的svg元素進行剪輯,通常
rect
做相應的寬度/高度(與「繪圖」區域相同)的作業。 - 轉換在剪輯路徑(區域)內繪製的所有元素,而不是父組。
在代碼(省略不相關部分),其結果是:
// Scales, axis, etc.
...
// Zoom behaviour & event handler
let zoomed = function() {
let e = d3.event;
let tx = Math.min(0, Math.max(e.translate[0], width - width*e.scale));
let ty = Math.min(0, Math.max(e.translate[1], height - height*e.scale));
zoom.translate([tx,ty]);
main.selectAll('.circle').attr('transform', 'translate(' + [tx,ty] + ')scale(' + e.scale + ')');
svg.select('.x.axis').call(xAxis);
svg.select('.y.axis').call(yAxis);
}
let zoom = d3.behavior.zoom()
.x(x)
.y(y)
.scaleExtent([1,8])
.on('zoom', zoomed);
const svg = d3.select('body').append('svg')
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom)
.attr('pointer-events', 'all')
.call(zoom);
const g = svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
// Set clip region, rect with same width/height as "drawing" area, where we will be able to zoom in
g.append('defs')
.append('clipPath')
.attr('id', 'clip')
.append('rect')
.attr('x', 0)
.attr('y', 0)
.attr('width', width)
.attr('height', height);
const main = g.append('g')
.attr('class', 'main')
.attr('clip-path', 'url(#clip)');
let circles = main.selectAll('.circle').data(data).enter();
相關問題
- 1. R:裁剪/縮放地圖
- 2. SVG viewBox縮放和裁剪
- 3. php縮放圖像裁剪
- 4. 縮放,裁剪和剪切視頻iPhone
- 5. d3 hexbin縮放問題
- 6. d3數據縮放問題
- 7. iPad裁剪問題
- 8. 通知中的縮放,裁剪圖標
- 9. QGraphicsView滾動和圖像縮放/裁剪
- 10. 縮放,裁剪和保存照片
- 11. 正確裁剪和縮放UIImage
- 12. 裁剪縮放的圖像'Android'
- 13. 縮放div時裁剪的內容
- 14. XML中的縮放和裁剪圖像
- 15. 縮放圖像以在android中裁剪
- 16. 裁剪UIImage從捏/縮放狀態
- 17. C#裁剪,縮放,旋轉圖像
- 18. 裁剪,縮放和居中位圖
- 19. 一個手指圖像縮放/裁剪
- 20. XNA Texture2D裁剪問題
- 21. JavaScript圖像裁剪問題
- 22. Devexpress PictureEdit裁剪問題
- 23. 問題在裁剪圖像
- 24. ios9 - 問題與裁剪CVImageBuffer
- 25. 圖像裁剪問題
- 26. 圖像裁剪問題
- 27. PHP圖像裁剪問題
- 28. 投影和裁剪問題?
- 29. JLayeredPane + JScrollPane裁剪問題
- 30. v4中的d3縮放功能問題