d3-zoomer
Version:
A library for easy pan-zoom behavior of d3
127 lines (86 loc) • 5.96 kB
Markdown
# d3-zoomer
[![npm version][npm-image]][npm-url]
[![npm downloads][downloads-image]][downloads-url]
[![Build Status][travis-image]][travis-url]
[![Dependencies Status][dependencies-image]][dependencies-url]
[![DevDependencies Status][dev-dependencies-image]][dev-dependencies-url]
[![Known Vulnerabilities][vulnerabilities-image]][vulnerabilities-url]
A library to use d3-zoom easily.
See how to use [d3-zoomer example](https://kimxogus.github.io/d3-zoomer).
## Installing
- d3-zoomer is based on d3 version 4.
- NPM
```bash
npm install d3-zoomer
```
```js
var d3Zoomer = require('d3-zoomer');
```
- Vanilla: Download
[latest release](https://github.com/kimxogus/d3-zoomer/releases/latest).
```html
<script src="path/to/d3.min.js"></script>
<script src="path/to/d3-zoomer.min.js"></script>
<script>
var zoomer = d3.zoomer();
</script>
```
## Usage
- You can call *zoomer* with *svg* or *g* which is child of *svg*. Zoomer will add class name to target *g* elements, and those target elements will be zoomed and panned.
- When you call *zoomer* with *svg*, only *g* elements with [targetClass](#targetClass) will be targeted.
- When you call *zoomer* with *g*, [targetClass](#targetClass) will be added to the *g* elements and they will be targeted.
```js
// Usage 1
var svg = d3.select('svg').call(zoomer);
// Usage 2
var g = d3.select('svg').append('g').call(zoomer);
```
## API Reference
<a name="zoomer" href="#zoomer">#</a> d3.<b>zoomer</b>() [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js "Source")
Creates a new zoomer.
<a name="targetClass" href="#targetClass">#</a> *zoomer*.<b>targetClass</b>([<i>targetClass</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L101 "Source")
Sets target class name(```'pan-zoom'``` by default) to be zoomed and panned. Zoomer will select all *g* classed with *targetClass*. If there are no *g* with *targetClass*, Zoomer will create a new *g* with *targetClass*.
If *targetClass* is not specified, current *targetClass* will be returned.
<a name="target" href="#target">#</a> *zoomer*.<b>target</b>() [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L110 "Source")
Returns current targets(*g* elements with [targetClass](#targetClass))
<a name="scale" href="#scale">#</a> *zoomer*.<b>scale</b>([<i>scale</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L114 "Source")
ScaleTo function. If *scale* is not specified, current scale will be returned.
*scale* of this function is not the scale of transform attribute. It's translated value from [scaleRange](#scaleRange) to [scaleDomain](#scaleDomain).
<a name="scaleRange" href="#scaleRange">#</a> *zoomer*.<b>scaleRange</b>([<i>scaleRange</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L122 "Source")
Sets scaleRange with specified array of numbers [*k0*, *k1*], which [*0.1*, *2*] by default, where *k0* is lower limit of actual scale of transform and *k1* is upper limit.
If *scaleRange* is not specified, current *scaleRange* will be returned.
<a name="scaleDomain" href="#scaleDomain">#</a> *zoomer*.<b>scaleDomain</b>([<i>scaleDomain</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L133 "Source")
Sets scaleDomain with specified array of numbers [*k0*, *k1*], which [*0.1*, *2*] by default, where *k0* is translated scale of lower limit of *scaleRange* and *k1* is translated scale of upper limit.
If *scaleDomain* is not specified, current *scaleDomain* will be returned.
<a name="on" href="#on">#</a> *zoomer*.<b>on</b>(<i>typename</i>[, <i>callback</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L143 "Source")
If *callback* is specified, register event listener for *typename*. If not, currently registered *callback* for *typename* will be returned.
Available *typenames* are as follows.
- ```start```: after zooming begins.
- ```zoom```: after a change to the zoom transform.
- ```end```: after zooming ends.
See [d3-zoom.on](https://github.com/d3/d3-zoom#zoom_on) for details.
<a name="transform" href="#transform">#</a> *zoomer*.<b>transform</b>([<i>transform</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L148 "Source")
If *transform* is specified, apply the transform to [target](#target). To apply transform, *transform* should be an object with properties of *x*, *y* and *k*. You can specify only one or two of those properties like
```js
zoomer.transform({
x: 100
});
```
If *transform* is not specified, current transform object([d3-zoom.zoomTransform](https://github.com/d3/d3-zoom#zoomTransform) object) will be returned.
<a name="enabled" href="#enabled">#</a> *zoomer*.<b>enabled</b>([<i>enabled</i>]) [<>](https://github.com/kimxogus/d3-zoomer/blob/master/src/index.js#L175 "Source")
Sets if zoom is enabled. If *enabled* is specified, zoom will be enabled(*true*) or disabled(*false*) as [d3-zoom.filter](https://github.com/d3/d3-zoom#zoom_filter).
If not, it will return current *enabled* status of d3-zoom.
[npm-image]: https://img.shields.io/npm/v/d3-zoomer.svg
[npm-url]: https://npmjs.org/package/d3-zoomer
[downloads-image]: https://img.shields.io/npm/dm/d3-zoomer.svg
[downloads-url]: https://npmjs.org/package/d3-zoomer
[travis-image]: https://travis-ci.org/kimxogus/d3-zoomer.svg
[travis-url]: https://travis-ci.org/kimxogus/d3-zoomer
[dependencies-image]: https://david-dm.org/kimxogus/d3-zoomer.svg
[dependencies-url]: https://david-dm.org/kimxogus/d3-zoomer
[dependencies-image]: https://david-dm.org/kimxogus/d3-zoomer/status.svg
[dependencies-url]: https://david-dm.org/kimxogus/d3-zoomer
[dev-dependencies-image]: https://david-dm.org/kimxogus/d3-zoomer/dev-status.svg
[dev-dependencies-url]: https://david-dm.org/kimxogus/d3-zoomer?type=dev
[vulnerabilities-image]: https://snyk.io/test/github/kimxogus/d3-zoomer/badge.svg
[vulnerabilities-url]: https://snyk.io/test/github/kimxogus/d3-zoomer