1

Here's what my code looks like on codepen (ignore broken image):

https://codepen.io/kornstalk/pen/ZEqXrgq

My issue is that whenever the code is run on browser, the animation on the icon breaks - the menu functions just fine (ignore the styling, I'm tweaking it later). This is my first time trying to use JS with HTMl & CSS, and it seems like the error's I've gotten are that Icon is undefined

Here is my full HTML Code:

    <!doctype html>
    <html class="no-js" lang="en">

    <head>
      <meta charset="utf-8">
      <title>Rlayout</title>
      <meta name="description" content="This site will serve as the hub for many sub responsive 
layouts">
      <meta name="viewport" content="width=device-width, initial-  scale=1">

      <meta property="og:title" content="">
      <meta property="og:type" content="">
      <meta property="og:url" content="">
      <meta property="og:image" content="">

      <link rel="manifest" href="site.webmanifest">
      <link rel="apple-touch-icon" href="icon.png">
      <!-- Place favicon.ico in the root directory -->

      <link rel="stylesheet" href="css/normalize.css">

      <link rel="stylesheet" href="css/main.css">
      <meta name="theme-color" content="#fafafa">
      <link rel="preconnect" href="https://fonts.googleapis.com">
      <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

      <!-- Fonts-->

      <!--Providence Sans-->
      <link rel="stylesheet" href="https://use.typekit.net/xzx3vba.css">
    
    </head>

    <body>
      <!-- Place your site's HTML here -->
      <header class="header">
        <img class="logo" src="img/giz2.jpg" alt="This is our company logo">
        <nav class="main-nav">
          <a href="">About</a>
          <span> | </span>
          <a href="">Contact</a>
          <span> | </span>
          <a href="">Work</a>
        </nav>
        <div class="mobile-nav-wrapper">
          <a href="javascript:void(0);" class="icon" data= "hamburger-menu" onclick="myFunction()">
          <span></span>
          <span></span>
          <span></span>
          </a>
          <nav id="myLinks" class="mobile-main-nav">
            <a href="">Work <span></span></a>
            <a href="">About</a>
            <a href="">Contact</a>
          </nav>
        </div>
      </header>



      <footer>
        <p>&copy; 2500</p>
        <div>
          <img src="./img/giz2.jpg" alt="">
          <img src="./img/giz2.jpg" alt="">
        </div>
      </footer>

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

    </html>

I've tried using the code below, which results in no errors, but won't animate:

var Icon = document.querySelector(".icon");
var Icon1 = document.querySelector(".icon span:nth-child(1)");
var Icon2 = document.querySelector(".icon span:nth-child(2)");
var Icon3 = document.querySelector(".icon span:nth-child(3)");

any help would be super appreciated !!!

kornbot
  • 13
  • 3
  • CodePen Is running a browser too, so your error is not that it's running in a browser. How are you hosting the files?, and do you get any errors in the browsers console.? – Keith May 02 '23 at 11:02
  • When I ran the code from CodePen, I kept getting an error in DevTools saying $ was undefined; the second set of code I ran had no errors, but no animation either. I've been hosting the files in GitHub - here's the link to the repository: https://github.com/17ekorn/Portfolio-EKORN – kornbot May 02 '23 at 11:06
  • Not a JS geek but I'd suggest you try the simplest animation you can think of or ocourse redo a tutorial and compare techniques. Best of luck. – kkron May 06 '23 at 00:18

1 Answers1

2

As the comments already stated, please look into the browser log and see what errors it gives you.

I would assume that you've forgotten to add the dependency to velocity.js.

Try to add the following in your HTML and test again:

<script src="https://raw.githubusercontent.com/julianshapiro/velocity/master/velocity.min.js"></script>

Edit: And maybe you've even forgotten to include jQuery. As you stated, that $ is not known, ensure that you include jQuery and velocity.

Edit 2

As you didn't quite believe me/us, I even did it myself and it worked flawlessly... I think no further questions are necessary :D Note that you must "enlarge" the code execution to see it in action.

// JS scripts placed here

function myFunction() {
  var x = document.getElementById("myLinks");
  if (x.style.display === "flex") {
    x.style.display = "none";
  } else {
    x.style.display = "flex";
  }
}

var Icon = $(".icon");
var Icon1 = Icon.find("span:nth-child(1)");
var Icon2 = Icon.find("span:nth-child(2)");
var Icon3 = Icon.find("span:nth-child(3)");

Icon.click(function() {
  $(this).toggleClass("active");

  if (Icon.hasClass("active")) {
    Icon1.velocity({
      top: "50%"
    }, {
      duration: 200,
      easing: "swing"
    });
    Icon3.velocity({
        top: "50%"
      }, {
        duration: 200,
        easing: "swing"
      })
      .velocity({
        rotateZ: "90deg"
      }, {
        duration: 800,
        delay: 200,
        easing: [500, 20]
      });
    Icon.velocity({
      rotateZ: "135deg"
    }, {
      duration: 800,
      delay: 200,
      easing: [500, 20]
    });
  } else {
    Icon.velocity("reverse");
    Icon3.velocity({
        rotateZ: "0deg"
      }, {
        duration: 800,
        easing: [500, 20]
      })
      .velocity({
        top: "100%"
      }, {
        duration: 200,
        easing: "swing"
      });
    Icon1.velocity("reverse", {
      delay: 800
    });
  }
});
/* Place CSS styles here */

html {
  scroll-behavior: smooth;
}

body {
  color: purple;
  /* distribute font to entire site */
  font-family: ff-providence-sans-web-pro, sans-serif;
  font-style: normal;
  font-weight: 400;
  background-color: var(--white);
}

:root {
  --grey: #ddd;
  --white: #F5F5F5;
}

img {
  width: 100%;
  height: auto;
}


/* distribute font to all headings */

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: 'Karla', sans-serif;
  font-style: italic;
  font-weight: 700;
  text-transform: uppercase;
  text-shadow: 5px 4px 7px #00c200;
}

h1 {
  font-size: 74px;
}

.header {
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 20px;
  align-items: center;
  justify-content: space-between;
}

.logo {
  max-width: 100px;
}

.main-nav {
  display: flex;
  justify-content: space-between;
  gap: 16px;
}

@media (max-width: 599px) {
  .main-nav {
    display: none;
  }
  .header {
    flex-direction: row;
  }
}

.icon {
  z-index: 1;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: 139px;
  margin-top: -281px;
  width: 44px;
  height: 33px;
  cursor: pointer;
}

.icon span {
  position: absolute;
  left: 0;
  width: 44px;
  height: 3px;
  background-color: black;
}

.icon span:nth-child(1) {
  top: 0;
}

.icon span:nth-child(2) {
  top: 50%;
}

.icon span:nth-child(3) {
  top: 100%;
}

.mobile-main-nav {
  display: none;
  flex-direction: column;
  background-color: var(--white);
  padding-bottom: 38px;
  align-items: center;
  align-content: center;
  margin-left: 20px;
  margin-right: 20px;
  position: absolute;
  top: 178px;
  left: 0;
  right: 0;
}

.mobile-main-nav a {
  padding: 8px;
  text-align: center;
}

.mobile-main-nav a::before {
  content: "";
  padding-top: 20px;
  display: block;
  padding-left: 12rem;
  border-top: 1px solid black;
}

.mobile-main-nav a::after {
  content: "";
  margin-bottom: -18px;
  display: block;
  padding-bottom: 20px;
  border-bottom: 2px solid black;
}

@media (min-width: 1000px) { /* CHANGED FOR DEMO ONLY */
  .mobile-nav-wrapper {
    display: none;
  }
}

@media screen and (min-width: 768px) {
  h1 {
    font-size: 64px;
  }
}
<!doctype html>
<html class="no-js" lang="en">

<head>
  <meta charset="utf-8">
  <title>Rlayout</title>
  <meta name="description" content="This site will serve as the hub for many sub responsive layouts">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <meta property="og:title" content="">
  <meta property="og:type" content="">
  <meta property="og:url" content="">
  <meta property="og:image" content="">

  <link rel="apple-touch-icon" href="icon.png">
  <!-- Place favicon.ico in the root directory -->

  <link rel="stylesheet" href="css/normalize.css">

  <link rel="stylesheet" href="css/main.css">
  <meta name="theme-color" content="#fafafa">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

  <!-- Fonts-->

  <!--Providence Sans-->
  <link rel="stylesheet" href="https://use.typekit.net/xzx3vba.css">

  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.2/velocity.min.js"></script>
</head>

<body>
  <!-- Hamburger Menu -->
  <header class="header">
    <img class="logo" src="img/giz2.jpg" alt="This is our company logo">
    <nav class="main-nav">
      <a href="">About</a>
      <span> | </span>
      <a href="">Contact</a>
      <span> | </span>
      <a href="">Work</a>
    </nav>
    <div class="mobile-nav-wrapper">
      <a href="javascript:void(0);" class="icon" data="hamburger-menu">
        <span></span>
        <span></span>
        <span></span>
      </a>
      <nav id="myLinks" class="mobile-main-nav">
        <a href="">Work <span></span></a>
        <a href="">About</a>
        <a href="">Contact</a>
      </nav>
    </div>
  </header>

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

</html>
Gykonik
  • 638
  • 1
  • 7
  • 24
  • no errors, but not animating either when I added the first - where would I add in jQuery? – kornbot May 02 '23 at 11:10
  • 1
    @kornbot Niklas is correct, in your GitHub repo your not loading `//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js` and `//cdnjs.cloudflare.com/ajax/libs/velocity/1.2.2/velocity.min.js` codePen was just doing that automatically for you, so just add those 2 scripts to your GitHub one and you should be fine. – Keith May 02 '23 at 11:24
  • you're a lifesaver! thank you so much- this and a misplaced typo on my edits caused the error! :D – kornbot May 02 '23 at 15:06