You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
earthquake_3d_viewer_front/three/playground/SplitscreenManager.js

92 lines
1.7 KiB
JavaScript

export class SplitscreenManager {
constructor( editor ) {
this.editor = editor;
this.renderer = editor.renderer;
this.composer = editor.composer;
this.gutter = null;
this.gutterMoving = false;
this.gutterOffset = 0.6;
}
setSplitview( value ) {
const nodeDOM = this.editor.domElement;
const rendererContainer = this.renderer.domElement.parentNode;
if ( value ) {
this.addGutter( rendererContainer, nodeDOM );
} else {
this.removeGutter( rendererContainer, nodeDOM );
}
}
addGutter( rendererContainer, nodeDOM ) {
rendererContainer.style[ 'z-index' ] = 20;
this.gutter = document.createElement( 'f-gutter' );
nodeDOM.parentNode.appendChild( this.gutter );
const onGutterMovement = () => {
const offset = this.gutterOffset;
this.gutter.style[ 'left' ] = 100 * offset + '%';
rendererContainer.style[ 'left' ] = 100 * offset + '%';
rendererContainer.style[ 'width' ] = 100 * ( 1 - offset ) + '%';
nodeDOM.style[ 'width' ] = 100 * offset + '%';
};
this.gutter.addEventListener( 'mousedown', () => {
this.gutterMoving = true;
} );
document.addEventListener( 'mousemove', ( event ) => {
if ( this.gutter && this.gutterMoving ) {
this.gutterOffset = Math.max( 0, Math.min( 1, event.clientX / window.innerWidth ) );
onGutterMovement();
}
} );
document.addEventListener( 'mouseup', () => {
this.gutterMoving = false;
} );
onGutterMovement();
}
removeGutter( rendererContainer, nodeDOM ) {
rendererContainer.style[ 'z-index' ] = 0;
this.gutter.remove();
this.gutter = null;
rendererContainer.style[ 'left' ] = '0%';
rendererContainer.style[ 'width' ] = '100%';
nodeDOM.style[ 'width' ] = '100%';
}
}