The zoom.scaleBy() Function in D3.js is used to scale the current zoom transform of the selected elements by k. The reference point p does move.
Syntax:
zoom.scaleBy(selection, k[, p])
Parameters: This function accepts three parameters as mentioned above and described below:
- selection: This parameter can be selection or transition.
- k: This parameter is a scale factor, specified either as numbers or as functions
- p: The value of p is not specified, it defaults value is the center of the viewport extent.
Return Value: This function returns the zoom behavior.
Below programs illustrate the zoom.scaleBy() function in D3.js
Example 1:
HTML
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < script src = </ script > < style > circle { opacity: 0.7; } g.zoom-controls { cursor: pointer; pointer-events: all; } g.zoom-controls rect { fill: white; stroke: #596877; stroke-width: 1; } g.zoom-controls line { stroke: #596877; stroke-width: 2; } </ style > </ head > < body > < center > < h1 style = "color: green;" > Geeksforneveropen </ h1 > < h3 > D3.js | zoom.scaleBy() Function </ h3 > < svg > < g class = "zoom-controls" transform = "translate(10, 10)" > < g id = "zoom-in" transform = "translate(0, 0)" > < rect width = "30" height = "30" ></ rect > < line x1 = "5" y1 = "15" x2 = "25" y2 = "15" ></ line > < line x1 = "15" y1 = "5" x2 = "15" y2 = "25" ></ line > </ g > < g id = "zoom-out" transform = "translate(30, 0)" > < rect width = "30" height = "30" ></ rect > < line x1 = "5" y1 = "15" x2 = "25" y2 = "15" ></ line > </ g > </ g > </ svg > < script > var radius = 10; var svg = d3.select('svg'); var dimension = document.body.getBoundingClientRect(); var data = d3.range(0, 25).map(function() { return { x: getRandom(radius, dimension.width - radius), y: getRandom(radius, dimension.height - radius) } }); var zoom = d3.zoom() .on('zoom', function() { canvas.attr('transform', d3.event.transform); }); var canvas = svg .attr('width', dimension.width) .attr('height', dimension.height) .call(zoom) .insert('g', ':first-child'); canvas.selectAll('circle') .data(data) .enter() .append('circle') .attr('r', radius) .attr('cx', function(d) { return d.x; }).attr('cy', function(d) { return d.y; }).style('fill', function() { return d3.schemeCategory10[getRandom(0, 9)] }); d3.select('#zoom-in').on('click', function() { // Smooth zooming zoom.scaleBy(svg.transition().duration(750), 1.3); }); d3.select('#zoom-out').on('click', function() { // Ordinal zooming zoom.scaleBy(svg, 1 / 1.3); }); function getRandom(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; } </ script > </ center > </ body > </ html > |
Output:
Example 2:
HTML
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < script src = </ script > </ head > < body > < center > < h1 style = "color: green;" > Geeksforneveropen </ h1 > < h3 >D3.js | zoom.scaleBy() Function</ h3 > < svg height = "100px" width = "100px" ></ svg > < script > const zoom_action = () => g.attr("transform", d3.event.transform); // Create the zoom handler const zoom = d3.zoom() .on("zoom", zoom_action); // Get SVG element and apply zoom behaviour var svg = d3 .select("svg") .call(zoom); // Create Group that will be zoomed var g = svg.append("g"); // Create circle g.append("circle") .attr("cx",0) .attr("cy",0) .attr("r", 5) .style("fill","green"); // Use of zoom.scaleBy Function zoom.scaleBy(svg, 5); zoom.translateBy(svg, 50, 50); </ script > </ center > </ body > </ html > |
Output: