diff --git a/src/components/Controls.tsx b/src/components/Controls.tsx index ab2040e..2f8e882 100644 --- a/src/components/Controls.tsx +++ b/src/components/Controls.tsx @@ -1,4 +1,5 @@ import { For, createSignal } from 'solid-js'; +import { createEffect } from 'solid-js'; import { useStore } from '../store/index'; import styles from './Controls.module.css'; @@ -7,39 +8,46 @@ import gridIcon from '../assets/icons/grid.svg' export default () => { const [store] = useStore(); - const [selected, setSelected] = createSignal(0); - const [blobby, setBlobby] = createSignal([0]); + const [selected, setSelected] = createSignal('home'); + const [blobby, setBlobby] = createSignal(['home']); const controls = [ { name: 'home', icon: homeIcon }, { name: 'projects', icon: gridIcon }, { name: 'whatever', icon: homeIcon }, ] + const selectChapter = (chapterName: string) => { + if (chapterName !== selected()) { + setSelected(chapterName) + setBlobby(b => [chapterName, ...b]) + setTimeout(() => { + setBlobby(b => [chapterName]) + }, 500) + } + } + + createEffect(() => { + selectChapter(store.visibleChapter()); + return store.visibleChapter(); + }, 'home'); + return ( <>
- {(control, i) => + {(control) =>
}
- {(control, i) => + {(control) =>
{ - if (i() !== selected()) { - setSelected(i()) - setBlobby(b => [i(), ...b]) - setTimeout(() => { - setBlobby(b => [i()]) - }, 500) - } - }} + onClick={() => selectChapter(control.name)} class={styles.control} > { const [t] = useI18n(); - const [add] = createViewportObserver(); + const [observer] = createViewportObserver({threshold: 0.9}); const [, { setVisibleChapter }] = useStore(); return (
{ - add(el, (event) => { - console.log(event.isIntersecting); + use:observer={(event) => { + if (event.isIntersecting) { setVisibleChapter('home'); - }); - }} + }} + } class={styles.Hero} >
diff --git a/src/components/Projects/Projects.module.css b/src/components/Projects/Projects.module.css index 9b2fded..e4b3467 100644 --- a/src/components/Projects/Projects.module.css +++ b/src/components/Projects/Projects.module.css @@ -1,4 +1,5 @@ .Projects { + height: 101vh; padding: 32px; display: flex; justify-content: center; diff --git a/src/components/Projects/Projects.tsx b/src/components/Projects/Projects.tsx index 2b62aac..7a77deb 100644 --- a/src/components/Projects/Projects.tsx +++ b/src/components/Projects/Projects.tsx @@ -5,16 +5,15 @@ import styles from './Projects.module.css'; export default () => { const [, { setVisibleChapter }] = useStore(); - const [add] = createViewportObserver(); + const [observer] = createViewportObserver({threshold: 0.9}); return ( -
{ - add(el, (event) => { - console.log(event.isIntersecting); +
{ + if (event.isIntersecting) { setVisibleChapter('projects'); - }); - }} + }} + } class={styles.Projects} >