mirror of
https://github.com/mastodon/mastodon.git
synced 2024-12-23 11:01:27 +01:00
add mouse scroll lock in image expand view (#15088)
* add mouse scroll lock in image expand view * enhancement
This commit is contained in:
parent
6a2db10f76
commit
f645dad661
1 changed files with 21 additions and 19 deletions
|
@ -194,11 +194,14 @@ class ZoomableImage extends React.PureComponent {
|
|||
|
||||
if (this.state.zoomMatrix.type === 'full-width') {
|
||||
// full width, scroll vertical
|
||||
this.container.scrollTop = this.container.scrollTop + event.pixelY;
|
||||
this.container.scrollTop = Math.max(this.container.scrollTop + event.pixelY, this.state.lockScroll.y);
|
||||
} else {
|
||||
// full height, scroll horizontal
|
||||
this.container.scrollLeft = this.container.scrollLeft + event.pixelY;
|
||||
this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelY, this.state.lockScroll.x);
|
||||
}
|
||||
|
||||
// lock horizontal scroll
|
||||
this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelX, this.state.lockScroll.x);
|
||||
}
|
||||
|
||||
mouseDownHandler = e => {
|
||||
|
@ -221,13 +224,8 @@ class ZoomableImage extends React.PureComponent {
|
|||
const dx = e.clientX - this.state.dragPosition.x;
|
||||
const dy = e.clientY - this.state.dragPosition.y;
|
||||
|
||||
if ((this.state.dragPosition.left - dx) >= this.state.lockScroll.x) {
|
||||
this.container.scrollLeft = this.state.dragPosition.left - dx;
|
||||
}
|
||||
|
||||
if ((this.state.dragPosition.top - dy) >= this.state.lockScroll.y) {
|
||||
this.container.scrollTop = this.state.dragPosition.top - dy;
|
||||
}
|
||||
this.container.scrollLeft = Math.max(this.state.dragPosition.left - dx, this.state.lockScroll.x);
|
||||
this.container.scrollTop = Math.max(this.state.dragPosition.top - dy, this.state.lockScroll.y);
|
||||
|
||||
this.setState({ dragged: true });
|
||||
}
|
||||
|
@ -336,22 +334,26 @@ class ZoomableImage extends React.PureComponent {
|
|||
const { scale, zoomMatrix } = this.state;
|
||||
|
||||
if ( scale >= zoomMatrix.rate ) {
|
||||
this.setState({ scale: MIN_SCALE }, () => {
|
||||
this.container.scrollLeft = 0;
|
||||
this.container.scrollTop = 0;
|
||||
this.setState({ lockScroll: {
|
||||
this.setState({
|
||||
scale: MIN_SCALE,
|
||||
lockScroll: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
} });
|
||||
},
|
||||
}, () => {
|
||||
this.container.scrollLeft = 0;
|
||||
this.container.scrollTop = 0;
|
||||
});
|
||||
} else {
|
||||
this.setState({ scale: zoomMatrix.rate }, () => {
|
||||
this.container.scrollLeft = zoomMatrix.scrollLeft;
|
||||
this.container.scrollTop = zoomMatrix.scrollTop;
|
||||
this.setState({ lockScroll: {
|
||||
this.setState({
|
||||
scale: zoomMatrix.rate,
|
||||
lockScroll: {
|
||||
x: zoomMatrix.scrollLeft,
|
||||
y: zoomMatrix.scrollTop,
|
||||
} });
|
||||
},
|
||||
}, () => {
|
||||
this.container.scrollLeft = zoomMatrix.scrollLeft;
|
||||
this.container.scrollTop = zoomMatrix.scrollTop;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue