感謝您的閱讀。D3.js在布面和svg中放大縮小行爲
目標
我想比較工作SVG點擊到變焦麥克·博斯托克的塊到基於畫布的系統。我將工作的SVG放在頂部,底部放置一個畫布。當用戶點擊上SVG中的狀態時,我希望較低的畫布元素「跟隨」或模仿縮放和平移。例如,單擊上SVG中的明尼蘇達也會導致較低的畫布放大並平移到明尼蘇達。
的問題
我的畫布元素繪製加載topojson後罰款,但它並沒有動畫。我希望它有動畫。我相信這是因爲我不完全瞭解縮放行爲和基於路徑的投影。
http://jsfiddle.net/30w8nv4t/2/
function zoomed(d) {
g.style("stroke-width", 1.5/d3.event.scale + "px");
g.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
// the zTranslate and zScale variables appear to be ok,
// but `d` is null. I'm not sure how to redraw.
var zTranslate = zoom.translate();
var zScale = zoom.scale();
console.log(zTranslate, zScale, d);
context.clearRect(0, 0, width, height);
context.beginPath();
canvasPath(d);
context.stroke();
}
在這種情況下,d
顯然是空的,我不能重繪什麼。我假設我的問題可能在zoomed
方法或clicked
函數中。
我用這並排側的方法,因爲我想學習路徑,投影和縮放行爲如何一起工作的原因。我很欣賞canvas對SVG的表現如何,但缺乏交互性令人望而生畏。幸運的是,能夠縮放和平移到任意幾何圖形將我的問題減半。
謝謝您的閱讀。 JSFiddle的鏈接位於這篇文章的頂部。
好,這讓我朝更好的方向發展。但是,當我們將鼠標縮放與點擊相結合時,它看起來有點小錯誤。例如,單擊加利福尼亞州。請注意,地圖會放大加利福尼亞州。現在將地圖向東拖動並點擊一個狀態。觀察到狀態不居中。話雖如此,這促使我瞭解縮放行爲和預測的作用。我的繪圖功能是正確的! :) – standers 2015-03-03 04:53:10