Added a mouse follow animation

This commit is contained in:
2022-01-29 17:01:19 +03:00
parent ce6fc1a0eb
commit 903bb60f20
2 changed files with 24 additions and 2 deletions

View File

@@ -3,6 +3,7 @@
ref="container" ref="container"
@mouseenter="handleMouseEnter" @mouseenter="handleMouseEnter"
@mouseleave="handleMouseLeave" @mouseleave="handleMouseLeave"
@mousemove="handleMouseMove"
/> />
</template> </template>
@@ -33,6 +34,8 @@ export default {
let scene; let scene;
let phone; let phone;
let renderer; let renderer;
let mouseX = 0;
let mouseY = 0;
function init() { function init() {
const environmentInit = () => { const environmentInit = () => {
@@ -141,6 +144,10 @@ export default {
phone.rotateAnim(); phone.rotateAnim();
break; break;
case 'lookAt':
phone.lookAtAnim(mouseX, mouseY, camera);
break;
default: default:
phone.floatAnim(); phone.floatAnim();
} }
@@ -150,7 +157,7 @@ export default {
} }
function handleMouseEnter() { function handleMouseEnter() {
animation.value = 'rotate'; animation.value = 'lookAt';
} }
function handleMouseLeave() { function handleMouseLeave() {
@@ -158,6 +165,12 @@ export default {
animation.value = 'float'; animation.value = 'float';
} }
function handleMouseMove(event) {
const rect = container.value.getBoundingClientRect();
mouseX = event.clientX - rect.left - rect.width / 2;
mouseY = -(event.clientY - rect.top - rect.height / 2);
}
onMounted(() => { onMounted(() => {
init(); init();
animate(); animate();
@@ -168,6 +181,7 @@ export default {
container, container,
handleMouseEnter, handleMouseEnter,
handleMouseLeave, handleMouseLeave,
handleMouseMove,
}; };
}, },
}; };

View File

@@ -1,4 +1,4 @@
import { Group } from 'three'; import { Group, Vector3 } from 'three';
export default class MockupModel extends Group { export default class MockupModel extends Group {
constructor() { constructor() {
@@ -35,4 +35,12 @@ export default class MockupModel extends Group {
rotateAnim() { rotateAnim() {
this.rotation.y += 0.02; this.rotation.y += 0.02;
} }
lookAtAnim(x, y, camera) {
const target = new Vector3();
target.x = x;
target.y = y;
target.z = camera.position.z;
this.lookAt(target);
}
} }