source: Dev/trunk/d3/examples/zoom-pan/zoom-pan.html @ 76

Last change on this file since 76 was 76, checked in by fpvanagthoven, 14 years ago

d3

File size: 2.5 KB
Line 
1<!DOCTYPE html>
2<html>
3  <head>
4    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
5    <title>Zoom + Pan</title>
6    <script type="text/javascript" src="../../d3.js"></script>
7    <script type="text/javascript" src="../../d3.behavior.js"></script>
8    <style type="text/css">
9
10svg {
11  font: 10px sans-serif;
12  shape-rendering: crispEdges;
13}
14
15    </style>
16  </head>
17  <body>
18    <script type="text/javascript">
19
20var size = [710, 500], // width height
21    padding = [4, 4, 20, 40], // top right bottom left
22    tx = function(d) { return "translate(" + x(d) + ",0)"; },
23    ty = function(d) { return "translate(0," + y(d) + ")"; },
24    stroke = function(d) { return d ? "#ccc" : "#666"; };
25
26// x-scale (1.42 = 710/500)
27var x = d3.scale.linear()
28    .domain([-1.42, +1.42])
29    .range([0, size[0]]);
30
31// y-scale (inverted domain)
32var y = d3.scale.linear()
33    .domain([+1.00, -1.00])
34    .range([0, size[1]]);
35
36var svg = d3.select("body").append("svg:svg")
37    .attr("width", size[0] + padding[3] + padding[1])
38    .attr("height", size[1] + padding[0] + padding[2])
39    .attr("pointer-events", "all")
40  .append("svg:g")
41    .attr("transform", "translate(" + padding[3] + "," + padding[0] + ")")
42    .call(d3.behavior.zoom().on("zoom", redraw));
43
44svg.append("svg:rect")
45    .attr("width", size[0])
46    .attr("height", size[1])
47    .attr("stroke", stroke)
48    .attr("fill", "none");
49
50redraw();
51
52function redraw() {
53  if (d3.event) d3.event.transform(x, y);
54
55  var fx = x.tickFormat(10),
56      fy = y.tickFormat(10);
57
58  // Regenerate x-ticks

59  var gx = svg.selectAll("g.x")
60      .data(x.ticks(10), String)
61      .attr("transform", tx);
62
63  gx.select("text")
64      .text(fx);
65
66  var gxe = gx.enter().insert("svg:g", "rect")
67      .attr("class", "x")
68      .attr("transform", tx);
69
70  gxe.append("svg:line")
71      .attr("stroke", stroke)
72      .attr("y1", 0)
73      .attr("y2", size[1]);
74
75  gxe.append("svg:text")
76      .attr("y", size[1])
77      .attr("dy", "1em")
78      .attr("text-anchor", "middle")
79      .text(fx);
80
81  gx.exit().remove();
82
83  // Regenerate y-ticks

84  var gy = svg.selectAll("g.y")
85      .data(y.ticks(10), String)
86      .attr("transform", ty);
87
88  gy.select("text")
89      .text(fy);
90
91  var gye = gy.enter().insert("svg:g", "rect")
92      .attr("class", "y")
93      .attr("transform", ty);
94
95  gye.append("svg:line")
96      .attr("stroke", stroke)
97      .attr("x1", 0)
98      .attr("x2", size[0]);
99
100  gye.append("svg:text")
101      .attr("x", -3)
102      .attr("dy", ".35em")
103      .attr("text-anchor", "end")
104      .text(fy);
105
106  gy.exit().remove();
107
108}
109
110    </script>
111  </body>
112</html>
Note: See TracBrowser for help on using the repository browser.