这是我为了解 D3.js 中最基本的缩放行为而制作的示例
canvas (svg) 被附加到 HTML 的正文中。然后附加一个蓝色矩形,然后附加一个红色矩形。缩放行为与线条一起添加
.call(d3.behavior.zoom().on("zoom",redraw))
这里当 D3 检测到画布上触发了“缩放”时调用了重绘函数。
代码示例在 javaScript 中的“类”对象中调用:
function ExampleZoom(){
/*** Class defining a zoomable svg. SVG AKA canvas in HTML5 ***/
var self = this;
self.margin = {top: 20, right: 20, bottom: 30, left: 40};
self.width = 960 - self.margin.left - self.margin.right;
self.height = 500 - self.margin.top - self.margin.bottom;
self.svg = d3.select("body").append("svg:svg")
.attr("width", self.width)
.attr("height", self.height)
.call(d3.behavior.zoom().on("zoom",redraw))
.append("g")
.attr("transform", "translate(" + self.margin.left + "," + self.margin.top + ")");
self.svg.append("svg:rect")
.attr("width",40)
.attr("height", 40)
.attr("y", 100)
.attr("x", 100)
.style("fill", "steelblue");
self.svg.append("svg:rect")
.attr("width",10)
.attr("height", 10)
.attr("y", 200)
.attr("x", 200)
.style("fill", "red");
//Redraw for zoom
function redraw() {
console.log("here", d3.event.translate, d3.event.scale);
self.svg.attr("transform","translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");
}
}//End of class
var ex = new ExampleZoom();