diff --git a/assets/css/app.scss b/assets/css/app.scss index c08343f..5a280f2 100644 --- a/assets/css/app.scss +++ b/assets/css/app.scss @@ -99,3 +99,23 @@ section[role="main-content"]{ } } + + +.elevator{ + position: absolute; + right:0; + top:43%; + ul{ + padding:1em; + background-color: rgba(255, 255, 255, 0.6); + li{ + padding:0.25em 0; + text-align: right; + min-width: 5em; + cursor: pointer; + &:hover, &.active{ + font-weight: bold; + } + } + } +} diff --git a/src/App.vue b/src/App.vue index dda3bf7..db2c4b4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -41,6 +41,7 @@ v-for="(project) in projects" :id="project.id" :key="project.id" + @lift="onLift" /> @@ -245,9 +246,9 @@ export default { this.updatedInteractiveObjects() // CONTROLS // https://blogs.perficient.com/2020/05/21/3d-camera-movement-in-three-js-i-learned-the-hard-way-so-you-dont-have-to/ - document.addEventListener('mousedown', this.onDocMouseDown, false) - document.addEventListener('mousemove', this.onDocMouseMove, false) - document.addEventListener('mouseup', this.onDocMouseup, false) + document.addEventListener('mousedown', this.onDocMouseDown) + document.addEventListener('mousemove', this.onDocMouseMove) + document.addEventListener('mouseup', this.onDocMouseup) }, updated () { this.updatedInteractiveObjects() @@ -295,7 +296,8 @@ export default { this.controls.user_interact = false // check if event is not a classic html link - if (e.target.className === 'close-btn') { + // TODO: stopPropagation instead of that (but it does not work) + if (e.target.className === 'close-btn' || e.target.className === 'btn-level') { // console.log('close-btn: vnode', this.opened_vnode) // this.opened_vnode.isOpened = false return @@ -315,7 +317,7 @@ export default { // if we clicked on 3Dobject if (intersects.length) { let cam = this.camera - console.log('onDocMouseUp intersects', intersects) + // console.log('onDocMouseUp intersects', intersects) let object = intersects[0].object console.log('object[0]', object) let vnode = object.userData.vnode @@ -388,6 +390,19 @@ export default { } } // end if dragging }, + onLift (toPos) { + console.log('onLift', toPos) + let cam = this.camera + let camPos = { ...cam.position } + new TWEEN.Tween(camPos) + .easing(TWEEN.Easing.Quadratic.InOut) + .to(toPos, 3000) + .onUpdate(function () { + // console.log('tween update', this._object) + cam.position.set(this._object.x, this._object.y, this._object.z) + }) + .start() + }, animate (tt) { // CONTROLS if (this.controls.user_interact) { diff --git a/src/components/objects/Project.vue b/src/components/objects/Project.vue index 269f911..eebff8a 100644 --- a/src/components/objects/Project.vue +++ b/src/components/objects/Project.vue @@ -39,13 +39,49 @@ :prtId="id" :data="item" /> +