heropage matrix
This commit is contained in:
@@ -7,37 +7,63 @@ gsap.registerPlugin(ScrollTrigger)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const main = ref(null);
|
const main = ref(null);
|
||||||
let tl;
|
let tl;
|
||||||
let ctx;
|
let ctx;
|
||||||
|
|
||||||
|
|
||||||
|
function setBoxes() {
|
||||||
|
|
||||||
|
const wrapper = main.value.querySelector('.content-wrapper');
|
||||||
|
const rect = wrapper.getBoundingClientRect();
|
||||||
|
|
||||||
|
const boxes = gsap.utils.toArray(".box");
|
||||||
|
|
||||||
|
gsap.set(".title", { y: 200 });
|
||||||
|
|
||||||
|
boxes.forEach((box) => {
|
||||||
|
|
||||||
|
const randomX = gsap.utils.random(0, rect.width);
|
||||||
|
const randomY = gsap.utils.random(0, rect.height);
|
||||||
|
|
||||||
|
gsap.set(box, {
|
||||||
|
x: randomX,
|
||||||
|
y: randomY,
|
||||||
|
xPercent: -50,
|
||||||
|
yPercent: -50
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function toggleTimeline() {
|
function toggleTimeline() {
|
||||||
tl.reversed(!tl.reversed())
|
tl.reversed(!tl.reversed())
|
||||||
}
|
}
|
||||||
function startNextAnimation() {
|
function startNextAnimation() {
|
||||||
|
const centerX = window.innerWidth / 2
|
||||||
|
const centerY = window.innerHeight / 2
|
||||||
|
const radius = 250
|
||||||
ctx = gsap.context(() => {
|
ctx = gsap.context(() => {
|
||||||
|
|
||||||
const boxes = gsap.utils.toArray(".box")
|
const boxes = gsap.utils.toArray(".box")
|
||||||
|
|
||||||
tl = gsap.timeline({
|
tl = gsap.timeline({
|
||||||
scrollTrigger: {
|
scrollTrigger: {
|
||||||
trigger: ".scroll-trigger-ready__worm-wrap",
|
trigger: ".scroll-trigger-ready__worm-wrap",
|
||||||
start: "top 00%",
|
start: "top 00%",
|
||||||
end: "bottom 30%",
|
end: "bottom 35%",
|
||||||
scrub: 1
|
scrub: 2
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
tl
|
tl.to(boxes, {
|
||||||
.to(boxes[0], { x: gsap.utils.random(300, 600), rotate: 180 })
|
y: () => gsap.utils.random(-400, -150),
|
||||||
.to(boxes[1], { x: -gsap.utils.random(300, 500), rotate: -180 }, "<")
|
|
||||||
.to(boxes[2], { x: gsap.utils.random(300, 400), rotate: 180 })
|
rotate: () => gsap.utils.random(-180, 180),
|
||||||
.to(boxes[3], { x: gsap.utils.random(300, 500), rotate: 180 })
|
ease: "none",
|
||||||
.to(boxes[4], { x: -gsap.utils.random(300, 400), rotate: -180 }, "<")
|
stagger: 0.05
|
||||||
.to(boxes[5], { x: gsap.utils.random(300, 500), rotate: 180 })
|
}).to(".title", {
|
||||||
.to(boxes[6], { x: -gsap.utils.random(300, 600), rotate: 180 })
|
|
||||||
.to(".title", {
|
|
||||||
y: window.innerHeight - 130,
|
y: window.innerHeight - 130,
|
||||||
duration: 4.0,
|
duration: 4.0,
|
||||||
ease: "power2.inOut"
|
ease: "power2.inOut"
|
||||||
@@ -47,6 +73,7 @@ function startNextAnimation() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
setBoxes();
|
||||||
startNextAnimation();
|
startNextAnimation();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -57,22 +84,36 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<section class="container" ref="main">
|
<section class="container" ref="main">
|
||||||
<h1 class="title">Welcome</h1>
|
<div class="content-wrapper">
|
||||||
<div>
|
<h1 class="title">Welcome</h1>
|
||||||
</div>
|
<div class="box">l</div>
|
||||||
|
<div class="box">e</div>
|
||||||
|
<div class="box">e</div>
|
||||||
|
<div class="box">r</div>
|
||||||
|
<div class="box">p</div>
|
||||||
<div class="box"></div>
|
<div class="box"></div>
|
||||||
<div class="box"></div>
|
<div class="box">H</div>
|
||||||
<div class="box"></div>
|
<div class="box">e</div>
|
||||||
<div class="box"></div>
|
<div class="box">d</div>
|
||||||
<div class="box"></div>
|
<div class="box">n</div>
|
||||||
<div class="box"></div>
|
<div class="box">a</div>
|
||||||
<div class="box"></div>
|
<div class="box">e</div>
|
||||||
|
<div class="box">l</div>
|
||||||
|
<div class="box">A</div>
|
||||||
|
<div class="box">x</div>
|
||||||
|
<div class="box">m</div>
|
||||||
|
<div class="box">o</div>
|
||||||
|
<div class="box">T</div>
|
||||||
|
<div class="box">r</div>
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</div>
|
||||||
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
background: radial-gradient(
|
background: radial-gradient(
|
||||||
129% 99% at 20% 85%,
|
129% 99% at 20% 85%,
|
||||||
@@ -88,43 +129,37 @@ onUnmounted(() => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 80vh;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-display: block;
|
position: relative;
|
||||||
font-style: normal;
|
z-index: 1;
|
||||||
font-weight: bold;
|
text-align: center;
|
||||||
color: #ffffff;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
font-size: clamp(2rem, 12rem, 5vw);
|
font-size: clamp(2rem, 12rem, 5vw);
|
||||||
box-sizing: border-box;
|
margin: 0;
|
||||||
font-display: block;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: bold;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.box {
|
.box {
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
background: linear-gradient(111.45deg, #ffffff 19.42%, #f7bdf8 73.08%);
|
|
||||||
border-radius: 20%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box:nth-child(2) {
|
display: flex;
|
||||||
background: linear-gradient(111.45deg, #ffffff 19.42%, #39ffba 73.08%);
|
align-items: center;
|
||||||
}
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--green);
|
||||||
|
|
||||||
.box:nth-child(3) {
|
line-height: 1.2;
|
||||||
background: linear-gradient(111.45deg, #ffffff 56.42%, #aed1e3 73.08%);
|
will-change: transform;
|
||||||
}
|
position: absolute;
|
||||||
|
|
||||||
.box:nth-child(4) {
|
|
||||||
background: linear-gradient(111.45deg, #ffffff 90.42%, #f8e3bd 12.08%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.box:nth-child(5) {
|
|
||||||
background: linear-gradient(111.45deg, #ffffff 19.42%, #76aaee 73.08%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { createApp } from 'vue'
|
import { createApp } from 'vue'
|
||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
import router from './router'
|
import router from './router'
|
||||||
|
import "./style.css"
|
||||||
|
|
||||||
|
|
||||||
createApp(App)
|
createApp(App)
|
||||||
|
|||||||
238
src/style.css
238
src/style.css
@@ -1,79 +1,173 @@
|
|||||||
|
|
||||||
:root {
|
:root {
|
||||||
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
|
--color-shockingly-green: #0ae448;
|
||||||
line-height: 1.5;
|
--color-just-black: #0e100f;
|
||||||
font-weight: 400;
|
--color-surface-white: #fffce1;
|
||||||
|
--color-pink: #fec5fb;
|
||||||
color-scheme: light dark;
|
--color-shockingly-pink: #f100cb;
|
||||||
color: rgba(255, 255, 255, 0.87);
|
--color-orangey: #ff8709;
|
||||||
background-color: #242424;
|
--color-lilac: #9d95ff;
|
||||||
|
--color-lt-green: #abff84;
|
||||||
font-synthesis: none;
|
--color-blue: #00bae2;
|
||||||
text-rendering: optimizeLegibility;
|
--color-grey: gray;
|
||||||
-webkit-font-smoothing: antialiased;
|
--color-surface75: #bbbaa6;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
--color-surface50: #7c7c6f;
|
||||||
|
--color-surface25: #42433d;
|
||||||
|
--gradient-macha: linear-gradient(
|
||||||
|
114.41deg,
|
||||||
|
var(--color-shockingly-green) 20.74%,
|
||||||
|
var(--color-lt-green) 65.5%
|
||||||
|
);
|
||||||
|
--gradient-orange-crush: linear-gradient(
|
||||||
|
111.45deg,
|
||||||
|
var(--color-orangey) 19.42%,
|
||||||
|
#f7bdf8 73.08%
|
||||||
|
);
|
||||||
|
--gradient-lipstick: linear-gradient(
|
||||||
|
165.72deg,
|
||||||
|
#f7bdf8 21.15%,
|
||||||
|
#cd237f 81.93%
|
||||||
|
);
|
||||||
|
--gradient-purple-haze: linear-gradient(
|
||||||
|
153.58deg,
|
||||||
|
#f7bdf8 32.25%,
|
||||||
|
#2f3cc0 92.68%
|
||||||
|
);
|
||||||
|
--gradient-skyfall: linear-gradient(
|
||||||
|
131.77deg,
|
||||||
|
#0a157a 30.82%,
|
||||||
|
#15bfe4 81.82%
|
||||||
|
);
|
||||||
|
--gradient-emerald-city: linear-gradient(
|
||||||
|
166.9deg,
|
||||||
|
var(--color-shockingly-green) 53.19%,
|
||||||
|
#0085d0 107.69%
|
||||||
|
);
|
||||||
|
--gradient-summer-fair: linear-gradient(
|
||||||
|
144.02deg,
|
||||||
|
var(--color-blue) 4.56%,
|
||||||
|
var(--color-pink) 72.98%
|
||||||
|
);
|
||||||
|
--color-core-green: #dfffd1;
|
||||||
|
--color-core-green-lt: #f3ffee;
|
||||||
|
--color-core-gradient: radial-gradient(
|
||||||
|
89.08% 84.62% at 16.54% 78.46%,
|
||||||
|
#fbfefa 0%,
|
||||||
|
#c9f6b4 39.58%,
|
||||||
|
#abff84 77.6%,
|
||||||
|
#2fee65 100%
|
||||||
|
);
|
||||||
|
--color-core-button-gradient: linear-gradient(
|
||||||
|
114.41deg,
|
||||||
|
#0ae448 20.74%,
|
||||||
|
#abff84 65.5%
|
||||||
|
);
|
||||||
|
--color-core-heading-gradient: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
#d6ffc3 0%,
|
||||||
|
rgba(214, 255, 195, 0) 100%
|
||||||
|
),
|
||||||
|
#f3ffee;
|
||||||
|
--color-core-intro-gradient: linear-gradient(
|
||||||
|
144.5deg,
|
||||||
|
#e8ffdd 65.09%,
|
||||||
|
#7dea7b 122.73%
|
||||||
|
),
|
||||||
|
linear-gradient(311.31deg, #7ef89e 36.08%, #e5ffd9 106.98%);
|
||||||
|
--color-text-purple: #d2ceff;
|
||||||
|
--color-text-purple-lt: #dfdcff;
|
||||||
|
--color-text-gradient: radial-gradient(
|
||||||
|
129.03% 100% at 120.97% 81.45%,
|
||||||
|
#dfdcff 27.08%,
|
||||||
|
#a69eff 100%
|
||||||
|
);
|
||||||
|
--color-svg-tangerine: #ffe3c7;
|
||||||
|
--color-svg-tangerine-lt: #fff0e0;
|
||||||
|
--color-svg-gradient: radial-gradient(
|
||||||
|
70.77% 70.77% at 0% 70.77%,
|
||||||
|
#ffd9b0 0%,
|
||||||
|
#fd9f3b 80.73%,
|
||||||
|
#ff8709 100%
|
||||||
|
);
|
||||||
|
--color-svg-heading-gradient: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
#ffbd77 0%,
|
||||||
|
rgba(254, 197, 251, 0) 100%
|
||||||
|
),
|
||||||
|
#ffe4c7;
|
||||||
|
--color-ui-blue: #bef3fe;
|
||||||
|
--color-ui-blue-lt: #e1faff;
|
||||||
|
--color-ui-blue-codeblk: #f6feff;
|
||||||
|
--color-ui-text-gradient: linear-gradient(
|
||||||
|
168.89deg,
|
||||||
|
#fec5fb -21.3%,
|
||||||
|
#00bae2 89.88%
|
||||||
|
);
|
||||||
|
--color-ui-code-blocktext-gradient: linear-gradient(
|
||||||
|
142.91deg,
|
||||||
|
#cef6ff 18.75%,
|
||||||
|
#a6efff 54.93%
|
||||||
|
);
|
||||||
|
--color-ui-gradient: radial-gradient(
|
||||||
|
78.77% 78.77% at 71.71% 30.77%,
|
||||||
|
#f0fcff 0%,
|
||||||
|
#9bedff 67.21%,
|
||||||
|
#98ecff 76.04%,
|
||||||
|
#5be1ff 84.9%,
|
||||||
|
#00bae2 94.79%
|
||||||
|
);
|
||||||
|
--color-ui-gradient-background: linear-gradient(
|
||||||
|
137.1deg,
|
||||||
|
#ecfcff 27.5%,
|
||||||
|
#a6efff 94.09%
|
||||||
|
);
|
||||||
|
--color-ui-gradient-flip-background: radial-gradient(
|
||||||
|
140% 190% at 117.54% 131.12%,
|
||||||
|
#f0fcff 0%,
|
||||||
|
#9bedff 25.52%,
|
||||||
|
#98ecff 42.71%,
|
||||||
|
#5be1ff 60.94%,
|
||||||
|
#00bae2 94.79%
|
||||||
|
);
|
||||||
|
--color-scroll-pink: #ffd7fd;
|
||||||
|
--color-scroll-pink-lt: #ffe9fe;
|
||||||
|
--color-scroll-gradient: linear-gradient(
|
||||||
|
317.42deg,
|
||||||
|
#ffe9fe 10.4%,
|
||||||
|
#ff96f9 83.03%
|
||||||
|
);
|
||||||
|
--ease-in: cubic-bezier(0.755, 0.05, 0.855, 0.06);
|
||||||
|
--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
|
||||||
|
--ease-in-out: cubic-bezier(0.86, 0, 0.07, 1);
|
||||||
|
--ease-out-quart: cubic-bezier(0.175, 0.79, 0.38, 0.905);
|
||||||
|
--ease-in-out-quart: cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
:root {
|
||||||
font-weight: 500;
|
--dark: var(--color-just-black);
|
||||||
color: #646cff;
|
--grey-dark: #42433d;
|
||||||
text-decoration: inherit;
|
--light: var(--color-surface-white);
|
||||||
}
|
--mid: #7c7c6f;
|
||||||
a:hover {
|
--grey: #gray;
|
||||||
color: #535bf2;
|
--gray: #gray;
|
||||||
|
--green: var(--color-shockingly-green);
|
||||||
|
--green-dark: #0ae448;
|
||||||
|
--green-light: var(--color-lt-green);
|
||||||
|
--blue: var(--color-blue);
|
||||||
|
--purple: var(--color-lilac);
|
||||||
|
--red: #cd237f;
|
||||||
|
--orange: var(--color-orangey);
|
||||||
|
accent-color: var(--color-shockingly-green);
|
||||||
}
|
}
|
||||||
|
/* lovely fluid fonts */
|
||||||
|
|
||||||
body {
|
:root {
|
||||||
margin: 0;
|
--fluid-min-width: 320;
|
||||||
display: flex;
|
--fluid-max-width: 1140;
|
||||||
place-items: center;
|
|
||||||
min-width: 320px;
|
|
||||||
min-height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
--fluid-screen: 100vw;
|
||||||
font-size: 3.2em;
|
--fluid-bp: calc(
|
||||||
line-height: 1.1;
|
(var(--fluid-screen) - var(--fluid-min-width) / 16 * 1rem) /
|
||||||
}
|
(var(--fluid-max-width) - var(--fluid-min-width))
|
||||||
|
);
|
||||||
button {
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
padding: 0.6em 1.2em;
|
|
||||||
font-size: 1em;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: inherit;
|
|
||||||
background-color: #1a1a1a;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: border-color 0.25s;
|
|
||||||
}
|
|
||||||
button:hover {
|
|
||||||
border-color: #646cff;
|
|
||||||
}
|
|
||||||
button:focus,
|
|
||||||
button:focus-visible {
|
|
||||||
outline: 4px auto -webkit-focus-ring-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
padding: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#app {
|
|
||||||
max-width: 1280px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 2rem;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
|
||||||
:root {
|
|
||||||
color: #213547;
|
|
||||||
background-color: #ffffff;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #747bff;
|
|
||||||
}
|
|
||||||
button {
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user