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"
@mouseenter="handleMouseEnter"
@mouseleave="handleMouseLeave"
@mousemove="handleMouseMove"
/>
</template>
@@ -33,6 +34,8 @@ export default {
let scene;
let phone;
let renderer;
let mouseX = 0;
let mouseY = 0;
function init() {
const environmentInit = () => {
@@ -141,6 +144,10 @@ export default {
phone.rotateAnim();
break;
case 'lookAt':
phone.lookAtAnim(mouseX, mouseY, camera);
break;
default:
phone.floatAnim();
}
@@ -150,7 +157,7 @@ export default {
}
function handleMouseEnter() {
animation.value = 'rotate';
animation.value = 'lookAt';
}
function handleMouseLeave() {
@@ -158,6 +165,12 @@ export default {
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(() => {
init();
animate();
@@ -168,6 +181,7 @@ export default {
container,
handleMouseEnter,
handleMouseLeave,
handleMouseMove,
};
},
};

View File

@@ -1,4 +1,4 @@
import { Group } from 'three';
import { Group, Vector3 } from 'three';
export default class MockupModel extends Group {
constructor() {
@@ -35,4 +35,12 @@ export default class MockupModel extends Group {
rotateAnim() {
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);
}
}