0
我正在嘗試縮放和使用d3平移。d3用DOM中心點關閉的平移/縮放
我舉了一個here的例子,並將svg換成了常規dom。
代碼:
var section = d3.select("section"),
width = +section.attr("width"),
height = +section.attr("height");
var points = d3.range(2000).map(phyllotaxis(10));
var div = section.append("div");
div.selectAll("p")
.data(points)
.enter().append("p")
.attr("style", function(d) { return 'left: '+d[0]+'px; top: '+d[1]+'px;' })
.text('hi');
section.call(d3.zoom()
.scaleExtent([1/2, 4])
.on("zoom", zoomed));
function zoomed() {
div.attr("style", `transform: translate(${d3.event.transform.x}px, ${d3.event.transform.y}px) scale(${d3.event.transform.k})`);
div.attr("transform", d3.event.transform);
}
function phyllotaxis(radius) {
var theta = Math.PI * (3 - Math.sqrt(5));
return function(i) {
var r = radius * Math.sqrt(i), a = theta * i;
return [
960/2 + r * Math.cos(a),
500/2 + r * Math.sin(a)
];
};
}
這裏的顯示問題進行codepen。
Issue: 請注意,平移效果很好,但縮放中心點關閉。它應該放大到鼠標所在的位置。
'480'從哪裏來? –
@TylerGraf寬度/ 2 – echonax
謝謝,修復它。你知道爲什麼係數是關閉的嗎? –