Freeze zooming on mouse click.

This commit is contained in:
Bill Thiede 2019-10-14 21:39:35 -07:00
parent 9936d763a7
commit 8826f6dee5

View File

@ -10,6 +10,7 @@ class App extends React.Component {
this.state = { this.state = {
data: null, data: null,
isFetching: false, isFetching: false,
isFrozen: false,
isZoomed: false, isZoomed: false,
zoomFactor: 16, zoomFactor: 16,
x: 0, x: 0,
@ -34,6 +35,7 @@ class App extends React.Component {
let imgs = []; let imgs = [];
let { let {
data, data,
isFrozen,
isZoomed, isZoomed,
x, x,
y, y,
@ -41,18 +43,28 @@ class App extends React.Component {
} = this.state; } = this.state;
if (data !== null) { if (data !== null) {
let {ratio, timestamp, images, size} = data; let {ratio, timestamp, images, size} = data;
console.log('size', size);
let width = 512; let width = 512;
let height = (ratio * width).toFixed(); let height = (ratio * width).toFixed();
const mouseClick = (e) => {
console.log('isFrozen', isFrozen, 'this.state.isFrozen', this.state.isFrozen);
this.setState({isFrozen: !this.state.isFrozen});
};
const mouseEnter = (e) => { const mouseEnter = (e) => {
console.log('mouseEnter'); if (isFrozen) {
return;
}
this.setState({isZoomed: true}); this.setState({isZoomed: true});
}; };
const mouseLeave = (e) => { const mouseLeave = (e) => {
console.log('mouseLeave'); if (isFrozen) {
return;
}
this.setState({isZoomed: false}); this.setState({isZoomed: false});
}; };
const mouseMove = (e) => { const mouseMove = (e) => {
if (isFrozen) {
return;
}
let rect = e.currentTarget.getBoundingClientRect(); let rect = e.currentTarget.getBoundingClientRect();
let x = e.clientX - rect.left; let x = e.clientX - rect.left;
let y = e.clientY - rect.top; let y = e.clientY - rect.top;
@ -65,11 +77,11 @@ class App extends React.Component {
backgroundSize: isZoomed ? zoomFactor * size[0] + 'px ' + zoomFactor * size[1] + 'px' : 'contain', backgroundSize: isZoomed ? zoomFactor * size[0] + 'px ' + zoomFactor * size[1] + 'px' : 'contain',
backgroundPosition: isZoomed ? 100*x + '% ' + 100*y + '%' : 'center center', backgroundPosition: isZoomed ? 100*x + '% ' + 100*y + '%' : 'center center',
}; };
console.log('isZoomed', isZoomed);
imgs = images.map((name) => { imgs = images.map((name) => {
let url = ROOT + name + '?t=' + timestamp; let url = ROOT + name + '?t=' + timestamp;
return ( return (
<div key={name} <div key={name}
onClick={mouseClick}
onMouseMove={mouseMove} onMouseMove={mouseMove}
onMouseEnter={mouseEnter} onMouseEnter={mouseEnter}
onMouseLeave={mouseLeave} onMouseLeave={mouseLeave}