Skip to content

Commit 3926eb3

Browse files
committedNov 26, 2019
feat: support maxScale and minScale
1 parent 0ee45ae commit 3926eb3

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed
 

‎src/ViewerCore.tsx

+14-2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export default (props: ViewerProps) => {
7171
noImgDetails = false,
7272
noToolbar = false,
7373
showTotal = true,
74+
minScale = 0.1,
7475
} = props;
7576

7677
const initialState: ViewerCoreState = {
@@ -588,8 +589,19 @@ export default (props: ViewerProps) => {
588589
let directY = state.scaleY > 0 ? 1 : -1;
589590
scaleX = state.scaleX + scale * direct * directX;
590591
scaleY = state.scaleY + scale * direct * directY;
591-
if (Math.abs(scaleX) < 0.1 || Math.abs(scaleY) < 0.1) {
592-
return;
592+
if (typeof props.maxScale !== 'undefined') {
593+
if (Math.abs(scaleX) > props.maxScale) {
594+
scaleX = props.maxScale * directX;
595+
}
596+
if (Math.abs(scaleY) > props.maxScale) {
597+
scaleY = props.maxScale * directY;
598+
}
599+
}
600+
if (Math.abs(scaleX) < minScale) {
601+
scaleX = minScale * directX;
602+
}
603+
if (Math.abs(scaleY) < minScale) {
604+
scaleY = minScale * directY;
593605
}
594606
top = state.top + -direct * diffY / state.scaleX * scale * directX;
595607
left = state.left + -direct * diffX / state.scaleY * scale * directY;

‎src/ViewerProps.ts

+6
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ interface ViewerProps {
108108

109109
// whether to display the total number and range
110110
showTotal?: boolean;
111+
112+
// max scale
113+
maxScale?: number;
114+
115+
// min scale
116+
minScale?: number;
111117
}
112118

113119
export default ViewerProps;

‎src/__tests__/viewer.test.tsx

+20
Original file line numberDiff line numberDiff line change
@@ -750,4 +750,24 @@ describe('Viewer', () => {
750750
triggerKeyboard(document, 'keydown', 39);
751751
expect($$('.react-viewer-showTotal')[0].innerHTML).toBe('2 of 2');
752752
});
753+
754+
it('max scale and min scale', () => {
755+
viewerHelper.new({
756+
className: 'my-react-viewer',
757+
maxScale: 1.06,
758+
minScale: 0.88,
759+
});
760+
viewerHelper.open();
761+
762+
let imgNode = $$('img.react-viewer-image')[0];
763+
764+
$$('li[data-key=zoomIn]')[0].click();
765+
$$('li[data-key=zoomIn]')[0].click();
766+
expect(getTransformValue(imgNode.style.transform).scaleX).toBe('1.06');
767+
$$('li[data-key=reset]')[0].click();
768+
$$('li[data-key=zoomOut]')[0].click();
769+
$$('li[data-key=zoomOut]')[0].click();
770+
$$('li[data-key=zoomOut]')[0].click();
771+
expect(getTransformValue(imgNode.style.transform).scaleX).toBe('0.88');
772+
});
753773
});

0 commit comments

Comments
 (0)
Please sign in to comment.