0

Issue: parallax effect is not working on the Parallax section. Notice that it flicks when the section shows up which is not what I want.

Currently data-scroll data-scroll-speed="-3" is on my experience section

What I did: For some reason, it works if I put data-scroll data-scroll-speed="-3" on my language section and it works how I want it for that section but it doesn't work for my experience section.

My code:

const intro = document.querySelector('.loading__container');
const word = document.querySelector('.word');
const content = document.querySelector('.content');

// On Load Animation
window.addEventListener('load', () => {
  word.classList.add('loading--active');
  gsap.set("html", {
    cursor: "wait"
  });
  setTimeout(() => {
    gsap.set("html", {
      cursor: "auto"
    }, "=-0.6");
    intro.classList.add('loading--inactive');
    word.classList.remove('loading--active');
  }, 1500)

  // Remove right after load
  setTimeout(() => {
    intro.remove();
  }, 2000)
});

// Scrolling Animation
const locoScroll = new LocomotiveScroll({
  el: document.querySelector('[data-scroll-container]'),
  smooth: true,
  multiplier: .50,
  smartphone: {
    smooth: true
  },
  tablet: {
    smooth: true
  },
});

// each time Locomotive Scroll updates, tell ScrollTrigger to update too (sync positioning)
locoScroll.on("scroll", ScrollTrigger.update);

// tell ScrollTrigger to use these proxy methods for the ".smooth-scroll" element since Locomotive Scroll is hijacking things
ScrollTrigger.scrollerProxy("[data-scroll-container]", {
  scrollTop(value) {
    return arguments.length ? locoScroll.scrollTo(value, {
      duration: 0,
      disableLerp: true
    }) : locoScroll.scroll.instance.scroll.y;
  }, // we don't have to define a scrollLeft because we're only scrolling vertically.
  getBoundingClientRect() {
    return {
      top: 0,
      left: 0,
      width: window.innerWidth,
      height: window.innerHeight
    };
  },
  // LocomotiveScroll handles things completely differently on mobile devices - it doesn't even transform the container at all! So to get the correct behavior and avoid jitters, we should pin things with position: fixed on mobile. We sense it by checking to see if there's a transform applied to the container (the LocomotiveScroll-controlled element).
  pinType: document.querySelector("[data-scroll-container]").style.transform ? "transform" : "fixed"
});

// each time the window updates, we should refresh ScrollTrigger and then update LocomotiveScroll. 
ScrollTrigger.addEventListener("refresh", () => locoScroll.update());
ScrollTrigger.defaults({
  scroller: "[data-scroll-container]"
});


function initHomeAnimations() {
  //Page 2
  const tlH = gsap.timeline({
    scrollTrigger: {
      trigger: '.background',
      markers: {
        startColor: 'blue',
        endColor: 'blue'
      },
      scrub: true,
      start: '-40%',
      end: '40%',
    },
  });
  tlH.fromTo('.highlight', {
    color: 'rgba(255, 255, 255, 0.4)'
  }, {
    color: 'rgba(255, 255, 255, 1)',
    stagger: 1
  });

  const tlHRemove = gsap.timeline({
    scrollTrigger: {
      trigger: '.background',
      markers: {
        startColor: 'pink',
        endColor: 'pink'
      },
      scrub: true,
      start: '-20%',
      end: '60%',
    },
  });
  tlHRemove.to('.highlight', {
    color: 'rgba(255, 255, 255, 0.4)',
    stagger: 1
  });






  /**
   * Allow pinning animation only for Desktop/Ipad users
   */
  ScrollTrigger.matchMedia({
    "(min-width: 820px)": function() {
      const pinSecond = gsap.timeline({
        scrollTrigger: {
          trigger: '.background',
          pin: true,
          start: '0%',
          end: '100%',
        }
      });



    },
  });



}

function initNavAnimations() {
  // Nav
  const tlIntro = gsap.timeline({
    scrollTrigger: {
      trigger: '.intro',
      start: '40%',
      toggleActions: 'play none none reverse',
      pin: true,
      pinSpacing: false,
      markers: true
    },
  });
  tlIntro.fromTo('nav', {
    opacity: 1
  }, {
    opacity: 0,
    duration: .60
  });
}

function initMagneticButtons() {
  const magnets = document.querySelectorAll('.magnetic');

  // START : If screen is bigger as 540 px do magnetic
  if (window.innerWidth > 540) {

    // Reset the mouse if hover off otherwise play the animation
    magnets.forEach((magnet) => {
      magnet.addEventListener('mousemove', moveMagnet);
      magnet.addEventListener('mouseleave', function(event) {
        gsap.to(event.currentTarget, 1.5, {
          x: 0,
          y: 0,
          ease: Elastic.easeOut
        });
        gsap.to(".btn-text", 1.5, {
          x: 0,
          y: 0,
          ease: Elastic.easeOut
        });
      });
    });

    // Mouse move
    function moveMagnet(event) {
      var magnetButton = event.currentTarget;
      var bounding = magnetButton.getBoundingClientRect();

      const magnetsStrength = 80;
      const magnetStrengthText = 60;

      // console.log(magnetButton)

      gsap.to(magnetButton, {
        x: (((event.clientX - bounding.left) / magnetButton.offsetWidth) - 0.5) * magnetsStrength,
        y: (((event.clientY - bounding.top) / magnetButton.offsetHeight) - 0.5) * magnetsStrength,
        rotate: "0.001deg",
        ease: Power4.easeOut
      });
    }
  }
}

// Main Scripts
function initScripts() {
  initNavAnimations();
  initMagneticButtons();
}

barba.init({
  sync: true,
  timeout: 7000,
  transitions: [{
    name: 'default',
    once({
      current,
      next
    }) {
      // Once page loads
      initHomeAnimations();
      initScripts();
    }
  }]
})
:root {
  /* Colors */
  --clr-black: #1d1d1f;
  --clr-blue: #0071e3;
  --clr-transparent: rgba(255, 255, 255, 0.6);
  --clr-transparent-light: rgba(255, 255, 255, 0.4);
  --clr-transparent-full: rgba(255, 255, 255, 1);
  /* font-sizes */
  --fs-900: clamp(5rem, 8vw + 1rem, 9.375rem);
  --fs-800: 6.25rem;
  --fs-700: clamp(1.94rem, 1.25rem + 3.45vw, 3.71rem);
  --fs-650: clamp(1.50rem, 1.25rem + 2vw, 3rem);
  /* 3 rem */
  --fs-600: clamp(2.62rem, 1.23rem + 1.96vw, 2.62rem);
  --fs-500: clamp(1.35rem, 1.15rem + 0.99vw, 1.86rem);
  --fs-400: clamp(1.13rem, 1.05rem + 0.37vw, 1.31rem);
  --fs-300: clamp(1rem, 0.94rem - 0.02vw, 1.125rem);
  --fs-200: clamp(0.66rem, 0.83rem - 0.24vw, 0.78rem);
  --fs-logo: 300;
  /* font-families */
  --ff-apple-normal: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  --section-padding: 0% 20%;
  --nav-height: min(4rem, 8vh + 095rem, 6rem);
  --section-padding: 5rem 1rem;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

* {
  margin: 0;
  padding: 0;
}

html,
body {
  height: 100%;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}


/**/

path,
i,
svg {
  pointer-events: none !important;
  /* Allows us to tap in the button without tapping in the actual img */
}

input,
button,
textarea,
select {
  font: inherit;
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

body {
  font-family: var(--ff-apple-normal);
  color: hsl(var(--clr-dark));
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

a:hover {
  opacity: 0.7;
}

a {
  transition: all 300ms ease;
}

.flex {
  display: flex;
}


/* ------------------------- Intro -------------------------------------------------- */

.loading__container {
  position: fixed;
  pointer-events: none;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  z-index: 100;
  background-color: transparent;
  transition: all 400ms ease-in-out;
}

.loading__screen {
  position: relative;
  padding: 0;
  width: 100%;
  height: 100%;
  left: 0;
  /* will-change: top; */
  background-color: var(--clr-black);
}

.loading--active {
  opacity: 1 !important;
}

.loading--inactive {
  opacity: 0;
}

.loading__words h2 {
  position: absolute;
  opacity: 0;
  top: 50%;
  left: 50%;
  color: var(--clr-transparent-full);
  transform: translate(-50%, -50%);
  text-align: center;
  pointer-events: none;
  /* will-change: opacity; */
  transition: all 400ms ease-in-out;
}


/* ------------------------- Nav -------------------------------------------------- */

nav {
  width: 100%;
  justify-content: space-between;
  align-items: center;
  padding: var(--nav-padding, 0 20%);
  height: var(--nav-height);
  min-height: var(--nav-height);
  background: var(--clr-transparent);
  backdrop-filter: blur(10px);
  z-index: 10;
  border: 1px solid limegreen;
}

nav,
a {
  text-decoration: none;
  color: var(--clr-black);
  position: relative;
}

.nav__links :is(a, button) {
  margin-left: var(--nav-margin, 2rem);
  letter-spacing: normal;
}

.magnetic {
  /* margin: 1rem; */
  padding: 1rem;
  display: inline-block;
  border-radius: 50%;
  border: 1px solid #000;
}

.logo {
  font-weight: bold;
}

.email-button {
  cursor: pointer;
  padding: 0.5rem 1.5rem;
  font-size: 0.6rem;
  background-color: var(--clr-blue);
  color: white;
  border: none;
  border-radius: 1rem;
  font-weight: 400;
  opacity: 1;
  transition: all 250ms ease-in-out;
}

.email-button:hover {
  opacity: 0.9;
}

.section {
  min-height: 100vh;
  padding: var(--section-padding);
}


/* ------------------------- Intro -------------------------------------------------- */

.intro {
  min-height: 100vh;
  padding: var(--section-padding);
  flex-direction: column;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.emoji :is(img) {
  cursor: pointer;
  width: 30px;
  height: 35px;
  vertical-align: text-top;
  margin: 1rem 5px;
}

.headshot {
  position: absolute;
  top: 25%;
  left: 35%;
  height: 600px;
  width: 400px;
  border-radius: 5rem;
  padding: 2rem;
  clip-path: circle(200px at 50% 50%);
  translate: scale(2) !important;
  transform: translate(2) !important;
}

.intro__text {
  z-index: 2;
  text-align: center;
  padding-bottom: var(--first-page-text-padding, 20rem);
}


/* ------------------------- Background -------------------------------------------------- */

.background {
  position: relative;
  justify-content: center;
  padding: var(--background-padding, 2rem 2rem);
  background-color: var(--clr-black);
  min-height: 100vh;
}

.highlight {
  color: var(--clr-transparent-light);
}

.light {
  color: var(--clr-transparent-full);
}


/* ------------------------- Skills -------------------------------------------------- */

.language {
  position: relative;
  justify-content: center;
  object-fit: cover;
}

.language img {
  width: 100px;
  height: 100px;
}

.language__list {
  justify-content: center;
  flex-wrap: wrap;
  padding: 12rem 5rem;
}

.language__img--wrapper {
  padding: 3rem 1rem;
}

.language__name {
  position: absolute;
  bottom: 0;
  transform: scale(0);
  transition: all 300ms;
  font-size: 20px;
  opacity: 0;
}

.language__img {
  transition: all 250ms ease-in-out;
}

.language:hover .language__name {
  transform: scale(1);
  opacity: 1;
}

.language:hover .language__img {
  filter: brightness(80%);
  opacity: 0.86;
  transform: scale(0.9);
}

.section__title {
  text-align: center;
}


/* ------------------------- Experience -------------------------------------------------- */

.experience {
  position: relative;
  background-color: var(--clr-black);
  color: var(--clr-transparent-full);
  --section-padding: 0;
  object-fit: cover;
}

.experience img {
  position: absolute;
  width: 100%;
  height: 125vh;
  z-index: 1;
}

.experience__container {
  height: 100vh;
  width: 100%;
  justify-content: center;
  align-items: center;
}

.experience__container h2 {
  position: relative;
  padding: var(--section-container-padding, 3.2rem);
  text-align: center;
  z-index: 5;
}


/* 
.single-image {
    height: 120%;
    top: 10%;
    object-fit: cover;
} */

.code {
  background-color: var(--clr-transparent-light) !important;
}


/* ------------------------- Responsive Media -------------------------------------------------- */

@media screen and (max-width: 540px) {
  nav {
    --nav-padding: 0 10%
  }
  .nav__links a {
    display: none;
  }
  .nav__links button {
    --nav-margin: 10rem;
  }
  .section__title {
    padding-bottom: 3rem;
  }
  .section__container h2 {
    --section-container-padding: 2rem;
  }
  .section__description p {
    --section-description-padding-left: 2rem;
  }
  .headshot {
    left: 0;
    top: 35%;
  }
}

@media screen and (max-width: 820px) {
  nav {
    --nav-padding: 0 10%
  }
}


/* ------------------------- Extras -------------------------------------------------- */

@keyframes fade-in {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 100%;
  }
}


/* @keyframes nav-in {
    0% {
        transform: translateY(-100%);
    } 
    100% {
        transform: translateY(0%);
    }
} */


/* ------------------------- Typography -------------------------------------------------- */

.fs-900 {
  font-size: var(--fs-900);
}

.fs-800 {
  font-size: var(--fs-800);
}

.fs-700 {
  font-size: var(--fs-700);
}

.fs-650 {
  font-size: var(--fs-650);
}

.fs-600 {
  font-size: var(--fs-600);
}

.fs-550 {
  font-size: var(--fs-550);
}

.fs-500 {
  font-size: var(--fs-500);
}

.fs-400 {
  font-size: var(--fs-400);
}

.fs-300 {
  font-size: var(--fs-300);
}

.fs-200 {
  font-size: var(--fs-200);
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Homepage | Hernandez G.</title>
  <link rel="stylesheet" href="./style.css">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/locomotive-scroll@3.5.4/dist/locomotive-scroll.css" />
</head>

<body data-barba="wrapper">
  <!-- Loading Container -->
  <div class="loading__container">
    <div class="loading__screen">
      <div class="loading__words">
        <h2 class="fs-800 word">Hello!</h2>
      </div>

    </div>
  </div>
  <!-- Nav -->
  <nav class="flex nav">
    <a href="./index.html" class="logo fs-400">Giovanny</a>
    <div class="nav__links">
      <a class="magnetic" href="#background"><span class="btn-text">Background</span></a>
      <a class="magnetic" href="#experience"><span class="btn-text">Experience</span></a>
      <a class="magnetic" href="#skills"><span class="btn-text">Skills</span></a>
      <button class="email-button">Email</button>
    </div>
  </nav>
  <div data-scroll-container data-barba="container" data-barba-namespace="first-page">

    <!-- Intro -->
    <section class="intro flex">
      <div class="intro__text">
        <h2 data-scroll data-scroll-speed="4" class="intro__name fs-700"><span class="name">Giovanny
                        Hernandez</span></h2>
        <h3 data-scroll data-scroll-speed="2" class="intro__subtitle fs-200">an aspiring Software Engineer with a creative and technical-minded focused on building efficient applications &amp; experiences.</h3>
      </div>
      <picture><img data-scroll data-scroll-speed="2" data-scroll-delay="0.035" class="headshot" src="./assets/headshot.jpeg" alt="">
      </picture>

    </section>
    <!-- Background -->
    <section id="background" class="section background flex">
      <div class="section__container fs-700">
        <span class="highlight">I'm currently a student at <a class="light" href="https://www.neiu.edu/"
                        target="_blank">Northeastern Illinois
                        University</a>. My expected graduation date is in 2025.</span>
        <span class="highlight">As a passionate person who loves CS, I enjoy learning about Software
                    Engineering.</span>
        <span class="highlight">I hope I can take part in the <span class="light">engineering</span> and
        <span class="light">designing</span> spectrum — a combination of technical knowledge with my creative vision to design and create beautiful implementations.</span>
      </div>
    </section>
    <!-- Skills -->
    <section id="skills" class="section skills">
      <div class="section__title">
        <h1>Skills</h1>
      </div>
      <div class="section__container">
        <div class="languages">
          <div class="language__list flex">
            <div class="language flex">
              <figure class="language__img--wrapper flex">
                <img src="./assets/html.png" class="language__img" alt="HTML logo" />
              </figure>
              <span class="language__name">HTML</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/css.png" class=" language__img" alt="CSS logo">
              </figure>
              <span class="language__name">CSS</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/js.png" class="language__img" alt="Javascript logo" />
              </figure>
              <span class="language__name">Javascript</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/java.png" class="language__img" alt="Java logo" />
              </figure>
              <span class="language__name">Java</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/csharp.svg
                                    " class="language__img" alt="C# logo" />
              </figure>
              <span class="language__name">C#</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/xamarin.png" class="language__img" alt="Xamarin Forms logo" />
              </figure>
              <span class="language__name">Xamarin</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/postgresql.png" class="language__img" alt="PostgreSQL logo" />
              </figure>
              <span class="language__name">PostgreSQL</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/mysql.png" class="language__img" alt="PostgreSQL logo" />
              </figure>
              <span class="language__name">MySQL</span>
            </div>
            <div class="language flex">
              <figure class="language__img--wrapper">
                <img src="./assets/spring.png" class="language__img" alt="PostgreSQL logo" />
              </figure>
              <span class="language__name">Spring Boot</span>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- Experience -->
    <section data-scroll data-scroll-speed="-3" class="section experience">
      <!-- <picture><img class="single-image" src="./assets/main.jpeg" alt="microsoft work image">
            </picture> -->
      <div class="experience__container flex">
        <h2 class="fs-700">Parallax</h2>
      </div>
    </section>
    <section class="code">
      <div class="experience__container flex">
        <h2 class="fs-700">Software Engineering</h2>
      </div>
    </section>
  </div>



  <script src="https://unpkg.com/@barba/core"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js" integrity="sha512-eP6ippJojIKXKO8EPLtsUMS+/sAGHGo1UN/38swqZa1ypfcD4I0V/ac5G3VzaHfDaklFmQLEs51lhkkVaqg60Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/ScrollTrigger.min.js" integrity="sha512-CPA5LMoJI/a5HkSIAKcBtFXe4gqGjPUL2ExF/3PmhrrHI17wod9xOqqF+0WZQRKIIq0KwF8oG5BaiWobtrke3A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <script src="https://cdn.jsdelivr.net/npm/locomotive-scroll@3.5.4/dist/locomotive-scroll.min.js"></script>

  <script src="./app.js"></script>
</body>

</html>
asportnoy
  • 2,218
  • 2
  • 17
  • 31
Giovanny
  • 11
  • 3

0 Answers0