Skip to content

Commit 4d22fc3

Browse files
committed
docs(home): add mouse-tilt effect to homepage logo
1 parent e20c0eb commit 4d22fc3

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

docs/.vitepress/theme/VuetifyLayout.vue

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import { useData, useRoute } from 'vitepress'
33
import DefaultTheme from 'vitepress/theme'
4-
import { createApp, nextTick, onMounted, provide, watch } from 'vue'
4+
import { createApp, nextTick, onMounted, onUnmounted, provide, watch } from 'vue'
55
import HomeHeroCopy from './components/HomeHeroCopy.vue'
66
77
const { isDark } = useData()
@@ -54,8 +54,45 @@
5454
})
5555
}
5656
57+
let rafId: number | null = null
58+
let mouseX = 0
59+
let mouseY = 0
60+
61+
function updateLogoTilt () {
62+
const logo = document.querySelector('.VPHome .image-src') as HTMLElement
63+
if (!logo) {
64+
rafId = null
65+
return
66+
}
67+
68+
const { innerWidth, innerHeight } = window
69+
const x = (mouseX / innerWidth - 0.5) * 2
70+
const y = (mouseY / innerHeight - 0.5) * 2
71+
72+
const tiltX = (y * -10).toFixed(2)
73+
const tiltY = (x * 10).toFixed(2)
74+
75+
logo.style.transform = `translate(-50%, -50%) perspective(500px) rotateX(${tiltX}deg) rotateY(${tiltY}deg)`
76+
rafId = null
77+
}
78+
79+
function onMouseMove (e: MouseEvent) {
80+
mouseX = e.clientX
81+
mouseY = e.clientY
82+
83+
if (!rafId) {
84+
rafId = requestAnimationFrame(updateLogoTilt)
85+
}
86+
}
87+
5788
onMounted(() => {
5889
mountHeroCopy()
90+
window.addEventListener('mousemove', onMouseMove)
91+
})
92+
93+
onUnmounted(() => {
94+
window.removeEventListener('mousemove', onMouseMove)
95+
if (rafId) cancelAnimationFrame(rafId)
5996
})
6097
6198
watch(

docs/.vitepress/theme/styles/main.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,10 @@ details > summary:hover {
264264
.home-benefits__grid {
265265
grid-template-columns: repeat(2, minmax(0, 1fr));
266266
}
267+
268+
.VPHome .image-container {
269+
transform: scale(1.4) translateY(-30px);
270+
}
267271
}
268272

269273
.home-benefits__item {

0 commit comments

Comments
 (0)