[READ-ONLY] Mirror of https://github.com/flo-bit/flo-bit.github.io. my personal website, w/ astro, svelte, tailwind, typescript, threlte flo-bit.dev/
portfolio portfolio-website svelte sveltekit tailwind threejs threlte typescript
0

Configure Feed

Select the types of activity you want to include in your feed.

make planet interactive

Florian (Jan 22, 2024, 3:29 AM +0100) f88f2ba3 aa4e753e

+56 -17
+1 -1
src/routes/+page.svelte
··· 48 48 src={fallback} 49 49 alt="background" 50 50 /> 51 - <div class="fixed left-0 right-0 top-0 h-screen -z-40"> 51 + <div class="fixed left-0 right-0 top-0 h-screen"> 52 52 <Canvas> 53 53 <Scene pos={percentageScroll} /> 54 54 </Canvas>
+48 -9
src/lib/3D/Scene.svelte
··· 1 1 <script lang="ts"> 2 2 import { T, useTask, useThrelte } from '@threlte/core'; 3 - import * as THREE from 'three'; 4 - import { OrbitControls } from '@threlte/extras'; 3 + import { Color } from 'three'; 4 + import { interactivity, useCursor } from '@threlte/extras'; 5 + interactivity(); 6 + 7 + const { hovering, onPointerEnter, onPointerLeave } = useCursor() 5 8 6 9 import Stars from './Stars.svelte'; 7 10 import { onMount } from 'svelte'; 8 11 import PlanetModel from './PlanetModel.svelte'; 9 12 import Nebula from './Nebula.svelte'; 10 13 14 + import { spring } from 'svelte/motion'; 15 + 16 + let rotate = spring( 17 + 0, 18 + { 19 + stiffness: 0.1, 20 + damping: 0.05 21 + } 22 + ); 23 + let size = spring( 24 + 2, 25 + { 26 + stiffness: 0.1, 27 + damping: 0.1 28 + } 29 + ); 30 + 11 31 let rotation = 0; 12 32 let distance = 1; 33 + 34 + let rotationSpeed = 0.1; 13 35 useTask((delta) => { 14 - rotation += delta * 0.1; 36 + // rotation += delta * rotationSpeed; 37 + 38 + rotate.set($rotate + delta * rotationSpeed); 15 39 16 40 if (window.innerWidth < 768) { 17 41 distance = 6; ··· 23 47 const { scene, renderer } = useThrelte(); 24 48 25 49 onMount(() => { 26 - scene.background = new THREE.Color(0x000000); 50 + scene.background = new Color(0x000000); 27 51 renderer.setClearColor(0x000000, 1); 28 52 }); 29 53 30 54 export let pos = 0; 31 55 56 + function debounceScale() { 57 + setTimeout(() => { 58 + size.set(2); 59 + }, 100); 60 + } 32 61 </script> 33 62 34 63 <T.PerspectiveCamera ··· 38 67 ref.lookAt(0, 1, 0); 39 68 }} 40 69 far={100} 41 - > 42 - <OrbitControls autoRotate={false} /> 43 - </T.PerspectiveCamera> 70 + ></T.PerspectiveCamera> 44 71 45 72 <T.DirectionalLight intensity={3} position={[-pos * 10 + 5, 2 + pos * 3, 2]} /> 46 73 47 74 <T.AmbientLight intensity={0.1} /> 48 75 49 76 <PlanetModel 50 - scale={2} 51 - rotation.y={rotation} 77 + on:click={() => { 78 + rotate.set($rotate + 4); 79 + }} 80 + on:pointerleave={() => { 81 + size.set(2) 82 + onPointerLeave() 83 + }} 84 + on:pointerenter={() => { 85 + size.set(2.2) 86 + onPointerEnter()} 87 + } 88 + 89 + scale={$size} 90 + rotation.y={$rotate} 52 91 rotation.z={0.1} 53 92 position.x={pos * 4 - 2} 54 93 position.z={-distance}
+4 -4
src/lib/components/Contact.svelte
··· 2 2 import SocialLink from '$lib/components/SocialLink.svelte'; 3 3 </script> 4 4 5 - <div class="py-32 bg-black/30 md:bg-transparent section" id="contact"> 5 + <div class="relative isolate py-32 bg-black/30 md:bg-transparent section pointer-events-none" id="contact"> 6 6 <div class="mx-auto max-w-5xl px-6 lg:px-8"> 7 7 <div class="grid grid-cols-1 gap-x-8 gap-y-10 md:grid-cols-3"> 8 8 <div> 9 - <h2 class="text-3xl font-bold tracking-tight text-zinc-900 dark:text-zinc-100"> 9 + <h2 class="text-3xl font-bold tracking-tight text-zinc-900 dark:text-zinc-100 pointer-events-auto"> 10 10 Get in touch 11 11 </h2> 12 - <p class="mt-4 leading-7 text-zinc-600 dark:text-zinc-300"> 12 + <p class="mt-4 leading-7 text-zinc-600 dark:text-zinc-300 pointer-events-auto"> 13 13 You have a project in mind? Let's talk about it. Drop me a line and I'll get back to you 14 14 as soon as possible. 15 15 </p> 16 16 17 - <ul role="list" class="mt-8"> 17 + <ul role="list" class="mt-8 pointer-events-auto"> 18 18 <SocialLink href="https://github.com/flo-bit" class="mt-4"> 19 19 <svelte:fragment slot="icon"> 20 20 <svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
+1 -1
src/lib/components/Footer.svelte
··· 1 - <footer class="bg-black"> 1 + <footer class="bg-black relative isolate "> 2 2 <div class="mx-auto max-w-7xl overflow-hidden px-6 py-12 lg:px-8"> 3 3 <p class="mt-4 text-center text-xs leading-5 text-zinc-500 dark:text-zinc-400"> 4 4 &copy; 2024 Florian Killius. All rights reserved.
+1 -1
src/lib/components/Hero.svelte
··· 1 - <div class="relative isolate overflow-hidden section h-screen" id="home"> 1 + <div class="relative isolate overflow-hidden section h-screen pointer-events-none ml-52" id="home"> 2 2 <div class="mx-auto max-w-5xl px-6 py-40 lg:px-8"> 3 3 <div class=""> 4 4 <h1
+1 -1
src/lib/components/Projects.svelte
··· 93 93 ]; 94 94 </script> 95 95 96 - <div id="projects" class="py-16 md:py-32 section bg-black"> 96 + <div id="projects" class="z-20 py-16 md:py-32 section bg-black relative isolate "> 97 97 <div class="mx-auto max-w-5xl px-6 lg:px-8"> 98 98 <div class="max-w-2xl"> 99 99 <h1 class="text-4xl font-bold tracking-tight text-zinc-800 dark:text-zinc-100 sm:text-5xl">