Home > Net >  I imported a NavBar to my portfolio kind web page, and it's appearing but no responding to clic
I imported a NavBar to my portfolio kind web page, and it's appearing but no responding to clic

Time:01-27

I saw this nav bar on codepen and thought it would be a great addition to my web page, by replacing my old navbar. But it's not responsive to the clicks i make to switch colors or "buttons". Also, I do not know much of js.

Here is my code:

`<body>
  <div >
    <menu >
      <button  style="--bgColorItem: #ff8c00;" >
        <svg  viewBox="0 0 24 24">
          <path d="M3.8,6.6h16.4"/>
          <path d="M20.2,12.1H3.8"/>
          <path d="M3.8,17.5h16.4"/>
        </svg>
      </button>
      
      <button  style="--bgColorItem: #f54888;">
        <svg  viewBox="0 0 24 24">
          <path  d="M6.7,4.8h10.7c0.3,0,0.6,0.2,0.7,0.5l2.8,7.3c0,0.1,0,0.2,0,0.3v5.6c0,0.4-0.4,0.8 0.8,0.8H3.8 C3.4,19.3,3,19,3,18.5v-5.6c0-0.1,0-0.2,0.1-0.3L6,5.3C6.1,5,6.4,4.8,6.7,4.8z"/>
          <path  d="M3.4,12.9H8l1.6,2.8h4.9l1.5-2.8h4.6"/>
        </svg>
      </button>
      
      <button  style="--bgColorItem: #4343f5;" >
        <svg  viewBox="0 0 24 24">
          <path  d="M3.4,11.9l8.8,4.4l8.4-4.4"/>
          <path  d="M3.4,16.2l8.8,4.5l8.4-4.5"/>
          <path  d="M3.7,7.8l8.6-4.5l8,4.5l-8,4.3L3.7,7.8z"/>
        </svg>
      </button>

      <button  style="--bgColorItem: #e0b115;" > 
        <svg  viewBox="0 0 24 24" >
          <path  d="M5.1,3.9h13.9c0.6,0,1.2,0.5,1.2,1.2v13.9c0,0.6-0.5,1.2-1.2,1.2H5.1c-0.6,0-1.2-0.5-1.2-1.2V5.1 C3.9,4.4,4.4,3.9,5.1,3.9z"/>
          <path  d="M4.2,9.3h15.6"/>
          <path  d="M9.1,9.5v10.3"/>
        </svg>
        </button>

        <button  style="--bgColorItem:#65ddb7;">
          <svg  viewBox="0 0 24 24" >
            <path  d="M5.1,3.9h13.9c0.6,0,1.2,0.5,1.2,1.2v13.9c0,0.6-0.5,1.2-1.2,1.2H5.1c-0.6,0-1.2-0.5-1.2-1.2V5.1 C3.9,4.4,4.4,3.9,5.1,3.9z"/>
            <path  d="M5.5,20l9.9-9.9l4.7,4.7"/>
            <path  d="M10.4,8.8c0,0.9-0.7,1.6-1.6,1.6c-0.9,0-1.6-0.7-1.6-1.6C7.3,8,8,7.3,8.9,7.3C9.7,7.3,10.4,8,10.4,8.8z"/>
          </svg>
        </button>

        <div ></div>
        <div >
        <svg viewBox="0 0 202.9 45.5" >
          <clipPath id="menu" clipPathUnits="objectBoundingBox" transform="scale(0.0049285362247413 0.021978021978022)">
            <path d="M 197 0 c -5.7 -0.1 -14.1 0.4 -23.3 4 c -5.7 2.3 -9.9 5 -18.1 10.5 c -10.7 7.1 -11.8 9.2 -20.6 14.3 c -5 2.9 -9.2 5.2 -15.2 7 c -7.1 2.1 -13.3 2.3 -17.6 2.1 c -4.2 0.2 -10.5 -0.1 -17.6 -2.1 c -6.1 -1.8 -10.2 -4.1 -15.2 -7 c -8.8 -5 -9.9 -7.1 -20.6 -14.3 c -8.3 -5.5 -12.4 -8.2 -18.1 -10.5 c -9.2 -3.6 -17.6 -4.2 -23.3 -4 H -6.7"/>
          </clipPath>
        </svg>
      </div>
    </menu>
  </div>

  <div> <!-- Welcome Section -->
    <section id="welcome-section" >
      <h1>This is my Web Page</h1>
      <p>and i love marketing</p>  
    </section>
  </div>`
`@import url('https://fonts.googleapis.com/css2?family=Raleway:wght@100;500;800&display=swap');


/* Variables */

:root {
  --main-white: #f0f0f0;
  --main-red: #be3144;
  --main-black: #171516;
  --main-gray: #303841;
}

/* Body */

body {
  font-family: "Poppins", sans-serif;
  font-size: 1.8rem;
  font-weight: 400;
  line-height: 1.4;
  color: var(--main-white);
}

h1,
h2 {
  font-family: "Poppins", sans-serif;
  font-weight: 700;
  text-align: center;
}

h1 {
  font-size: 6rem;
}

h2 {
  font-size: 4rem;
}

ul {
  list-style: none;
}

a {
  text-decoration: none;
  color: var(--main-white);
}

img {
  display: block;
  width: 100%;
}

/* Doc */

* {
  font-family: "Poppins", sans-serif;
  margin: 0;
}

/* Welcome Section */

.welcome-section {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100vh;
  background-color: var(--main-white);
}

.welcome-section h1 {
  color: var(--main-black);
}


.welcome-section p {
  font-size: 4rem;
  font-weight: 200;
  font-style: italic;
  color: var(--main-red);
}

/* NavBox */

.newNavBar {
  box-sizing: border-box;
  /* display: flex; */
  justify-content: flex-end;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  margin: 0;
  --bgColorMenu:
  var(--main-black);
  --duration: 0.7s;
  background-color: var(--main-black);
  -webkit-tap-highlight-color: transparent;
  transition: background-color var(--duration);
}


.menu {
  margin: 0;
  display: flex;
  /* Works well with 100% width  */
  font-size: 1.5em;
  padding: 0 2.85em;
  position: relative;
  align-items: center;
  justify-content: center;
  background-color: var(--main-black);
}

.menu__item {
  all: unset;
  flex-grow: 1;
  z-index: 100;
  display: flex;
  cursor: pointer;
  position: relative;
  border-radius: 50%;
  align-items: center;
  will-change: transform;
  justify-content: center;
  padding: 0.55em 0 0.85em;
  transition: transform var(--timeOut, var(--duration));
}

.menu__item::before {
  content: "";
  z-index: -1;
  width: 4.2em;
  height: 4.2em;
  border-radius: 50%;
  position: absolute;
  transform: scale(0);
  transition: background-color var(--duration), transform var(--duration);
}

.menu__item.active {
  transform: translate3d(0, 0.8em, 0);
}

.menu__item.active::before {
  transform: scale(1);
  background-color: var(--bgColorItem);
}

.icon {
  width: 2.6em;
  height: 2.6em;
  /*Personalize the icon color*/
  stroke: white;
  /*Personalize the icon filling */
  fill: transparent;
  stroke-width: 1pt;
  stroke-miterlimit: 10;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 400;
}

.menu__item.active .icon {
  animation: strok 1.5s reverse;
}

@keyframes strok {
  100% {
    stroke-dashoffset: 400;
  }
}

.menu__border {
  left: 0;
  top: 99%;
  width: 10.9em;
  height: 2.4em;
  position: absolute;
  clip-path: url(#menu);
  will-change: transform;
  background-color: var(--bgColorMenu);
  transition: transform var(--timeOut, var(--duration));
}

.svg-container {
  width: 0;
  height: 0;
}

@media screen and (max-width: 50em) {
  .menu {
    font-size: 0.8em;
  }
}`
`const body = document.body;
const bgColorsBody = ["#ffb457", "#ff96bd", "#9999fb", "#ffe797", "#cffff1"];
const menu = body.querySelector(".menu");
const menuItems = menu.querySelectorAll(".menu__item");
const menuBorder = menu.querySelector(".menu__border");
let activeItem = menu.querySelector(".active");

function clickItem(item, index) {
  menu.style.removeProperty("--timeOut");

  if (activeItem == item) return;

  if (activeItem) {
    activeItem.classList.remove("active");
  }

  item.classList.add("active");
  body.style.backgroundColor = bgColorsBody[index];
  activeItem = item;
  offsetMenuBorder(activeItem, menuBorder);
}

function offsetMenuBorder(element, menuBorder) {
  const offsetActiveItem = element.getBoundingClientRect();
  const left =
    Math.floor(
      offsetActiveItem.left -
        menu.offsetLeft -
        (menuBorder.offsetWidth - offsetActiveItem.width) / 2
    )   "px";
  menuBorder.style.transform = `translate3d(${left}, 0 , 0)`;
}

offsetMenuBorder(activeItem, menuBorder);

menuItems.forEach((item, index) => {
  item.addEventListener("click", () => clickItem(item, index));
});

window.addEventListener("resize", () => {
  offsetMenuBorder(activeItem, menuBorder);
  menu.style.setProperty("--timeOut", "none");
});`

I've tried adding the tag to my page but it does not seem to help with the issue, and the console says the error is "Uncaught TypeError: Cannot read properties of null (reading 'querySelector') at back.js:3:19"

CodePudding user response:

Just solved the issue, turns out the js code was being loaded before the html and css part so the value was going to be null at the beginning. Solved it by adding this to my tag.

<head>
    <script defer src="index.js"></script>
</head>
  • Related