Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,18 @@ panzoom(element, {
});
```

## Change pan mouse button

When using a mouse, the default behaviour is clicking with the left button and drag to
pan, you can specify which mouse button you prefer with the option `panButton`, the
possible options are `left` or `middle`.

``` js
panzoom(element, {
panButton: 'left'
});
```

## Zoom Speed

You can adjust how fast it zooms, by passing optional `zoomSpeed` argument:
Expand Down
44 changes: 26 additions & 18 deletions dist/panzoom.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ function createPanZoom(domElement, options) {
var speed = typeof options.zoomSpeed === 'number' ? options.zoomSpeed : defaultZoomSpeed;
var transformOrigin = parseTransformOrigin(options.transformOrigin);
var textSelection = options.enableTextSelection ? fakeTextSelectorInterceptor : domTextSelectionInterceptor;
var panButton = options.panButton || 'left';

validateBounds(bounds);

Expand Down Expand Up @@ -788,11 +789,20 @@ function createPanZoom(domElement, options) {
e.stopPropagation();
return false;
}
// for IE, left click == 1
// for Firefox, left click == 0
var isLeftButton =
(e.button === 1 && window.event !== null) || e.button === 0;
if (!isLeftButton) return;

if (panButton === 'left') {
// for IE, left click == 1
// for Firefox, left click == 0
var isLeftButton =
(e.button === 1 && window.event !== null) || e.button === 0;
if (!isLeftButton) return;
}

if (panButton === 'middle') {
var isMiddleButton =
(e.button === 3 && window.event !== null) || e.button === 1;
if (!isMiddleButton) return;
}

smoothScroll.cancel();

Expand Down Expand Up @@ -1280,10 +1290,9 @@ function makeDomController(domElement, options) {
function applyTransform(transform) {
// TODO: Should we cache this?
domElement.style.transformOrigin = '0 0 0';
domElement.style.transform = 'matrix(' +
transform.scale + ', 0, 0, ' +
transform.scale + ', ' +
transform.x + ', ' + transform.y + ')';
domElement.style.setProperty('transform', 'matrix(var(--pz-transform))');
domElement.style.setProperty('--pz-transform',
`${transform.scale}, 0, 0, ${transform.scale}, ${transform.x}, ${transform.y}`);
}
}

Expand Down Expand Up @@ -1327,12 +1336,12 @@ function makeSvgController(svgElement, options) {
}

function getBBox() {
var bbox = svgElement.getBBox();
var boundingBox = svgElement.getBBox();
return {
left: bbox.x,
top: bbox.y,
width: bbox.width,
height: bbox.height,
left: boundingBox.x,
top: boundingBox.y,
width: boundingBox.width,
height: boundingBox.height,
};
}

Expand All @@ -1358,13 +1367,12 @@ function makeSvgController(svgElement, options) {
transform.y = screenCTM.f;
transform.scale = screenCTM.a;
owner.removeAttributeNS(null, 'viewBox');
svgElement.style.setProperty('transform', 'matrix(var(--pz-transform))');
}

function applyTransform(transform) {
svgElement.setAttribute('transform', 'matrix(' +
transform.scale + ' 0 0 ' +
transform.scale + ' ' +
transform.x + ' ' + transform.y + ')');
svgElement.style.setProperty('--pz-transform',
`${transform.scale}, 0, 0, ${transform.scale}, ${transform.x}, ${transform.y}`);
}
}

Expand Down
2 changes: 1 addition & 1 deletion dist/panzoom.min.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ declare module "panzoom" {
enableTextSelection?: boolean;
disableKeyboardInteraction?: boolean;
transformOrigin?: TransformOrigin;
panButton?: 'left' | 'middle';
}

export interface PanZoom {
Expand Down
20 changes: 15 additions & 5 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ function createPanZoom(domElement, options) {
var speed = typeof options.zoomSpeed === 'number' ? options.zoomSpeed : defaultZoomSpeed;
var transformOrigin = parseTransformOrigin(options.transformOrigin);
var textSelection = options.enableTextSelection ? fakeTextSelectorInterceptor : domTextSelectionInterceptor;
var panButton = options.panButton || 'left';

validateBounds(bounds);

Expand Down Expand Up @@ -787,11 +788,20 @@ function createPanZoom(domElement, options) {
e.stopPropagation();
return false;
}
// for IE, left click == 1
// for Firefox, left click == 0
var isLeftButton =
(e.button === 1 && window.event !== null) || e.button === 0;
if (!isLeftButton) return;

if (panButton === 'left') {
// for IE, left click == 1
// for Firefox, left click == 0
var isLeftButton =
(e.button === 1 && window.event !== null) || e.button === 0;
if (!isLeftButton) return;
}

if (panButton === 'middle') {
var isMiddleButton =
(e.button === 3 && window.event !== null) || e.button === 1;
if (!isMiddleButton) return;
}

smoothScroll.cancel();

Expand Down
7 changes: 3 additions & 4 deletions lib/makeDomController.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,9 @@ function makeDomController(domElement, options) {
function applyTransform(transform) {
// TODO: Should we cache this?
domElement.style.transformOrigin = '0 0 0';
domElement.style.transform = 'matrix(' +
transform.scale + ', 0, 0, ' +
transform.scale + ', ' +
transform.x + ', ' + transform.y + ')';
domElement.style.setProperty('transform', 'matrix(var(--pz-transform))');
domElement.style.setProperty('--pz-transform',
`${transform.scale}, 0, 0, ${transform.scale}, ${transform.x}, ${transform.y}`);
}
}

Expand Down
7 changes: 3 additions & 4 deletions lib/makeSvgController.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,12 @@ function makeSvgController(svgElement, options) {
transform.y = screenCTM.f;
transform.scale = screenCTM.a;
owner.removeAttributeNS(null, 'viewBox');
svgElement.style.setProperty('transform', 'matrix(var(--pz-transform))');
}

function applyTransform(transform) {
svgElement.setAttribute('transform', 'matrix(' +
transform.scale + ' 0 0 ' +
transform.scale + ' ' +
transform.x + ' ' + transform.y + ')');
svgElement.style.setProperty('--pz-transform',
`${transform.scale}, 0, 0, ${transform.scale}, ${transform.x}, ${transform.y}`);
}
}

Expand Down