0
我想用D3.js旋转并缩放其中心的图形。当我缩放图形时,我想用当前宽高比缩放图形,反之亦然,我想旋转图形时将其缩放到鼠标指向的当前点。对于缩放,我使用鼠标滚轮并进行旋转,我使用鼠标按钮。用d3旋转并缩放svg javascript
var svg = d3.select("svg"),
width = +svg.attr("width"),
height = +svg.attr("height"),
transform = d3.zoomIdentity;
var points = d3.range(2000).map(phyllotaxis(10));
var g = svg.append("g");
g.append("line")
.attr("x1", "20")
.attr("y1", "20")
.attr("x2", "60")
.attr("y2", "60")
.attr("stroke", "black")
.attr("stroke-width", "10");
svg.call(d3.drag()
.on("drag",onDrag)
)
// ##########################
var boxCenter = [100, 100];
// #############################
function onDrag(){
var x = d3.event.sourceEvent.pageX,
y = d3.event.sourceEvent.pageY;
var angle = Math.atan2(x - boxCenter[0],
- (y - boxCenter[1]))*(180/Math.PI);
g.attr("transform", "rotate("+angle+")");
}
svg.call(d3.zoom()
.scaleExtent([1/2, 8])
.on("zoom", zoomed));
function zoomed() {
g.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 {
x: width/2 + r * Math.cos(a),
y: height/2 + r * Math.sin(a)
};
};
}
这是我的例子: https://jsfiddle.net/6Lyjz35L/
感谢它帮助我,我也加入2克元素一个是旋转另一种是缩放处理程序两个是SVG元素 –