mirror of
https://github.com/anatolykopyl/vue-three-d-mockup.git
synced 2026-03-26 04:45:09 +00:00
Added a mouse follow animation
This commit is contained in:
@@ -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,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user