Skip to content
Snippets Groups Projects
HeaderComponent.vue 7.44 KiB
<template>
  <div
    class="sticky top-0 z-30 transition-all"
    :class="{ 'bg-white': !transparent, 'shadow-14x28': withShadow }"
  >
    <header
      v-if="width > 1000"
      class="flex justify-around items-center py-3.5"
      :class="textWhite ? 'text-white' : 'text-dark'"
    >
      <div class="flex-auto basis-[28.57%] h-[46px] flex justify-center">
        <router-link to="/">
          <LogoSvg :class="textWhite ? 'text-white' : 'text-blue'"></LogoSvg>
        </router-link>
      </div>

      <nav class="flex justify-around flex-auto basis-[42.86%] text-xl">
        <router-link
          to="/"
          class="transition-colors"
          :class="[
            currentPage === 'home' ? 'font-bold' : '',
            textWhite ? 'hover:text-gray-bg' : 'hover:text-gray',
          ]"
          >Home</router-link
        >
        <router-link
          to="/services"
          class="transition-colors"
          :class="[
            currentPage === 'services' ? 'font-bold' : '',
            textWhite ? 'hover:text-gray-bg' : 'hover:text-gray',
          ]"
          >Services</router-link
        >
        <router-link
          to="/home"
          class="transition-colors"
          :class="[
            currentPage === 'about us' ? 'font-bold' : '',
            textWhite ? 'hover:text-gray-bg' : 'hover:text-gray',
          ]"
          >About us</router-link
        >
        <router-link
          to="/home"
          class="transition-colors"
          :class="[
            currentPage === 'team' ? 'font-bold' : '',
            textWhite ? 'hover:text-gray-bg' : 'hover:text-gray',
          ]"
          >Team</router-link
        >
        <router-link
          to="/home"
          class="transition-colors"
          :class="[
            currentPage === 'contact' ? 'font-bold' : '',
            textWhite ? 'hover:text-gray-bg' : 'hover:text-gray',
          ]"
          >Contact</router-link
        >
        <router-link
          to="/blogs"
          class="transition-colors"
          :class="[
            currentPage === 'blog' ? 'font-bold' : '',
            textWhite ? 'hover:text-gray-bg' : 'hover:text-gray',
          ]"
          >Blog</router-link
        >
      </nav>
      <div class="flex-auto basis-[28.57%] flex justify-center">
        <button
          class="rounded bg-blue text-white py-3.5 px-[42px] font-medium hover:bg-blue-700 transition-colors"
          @click="scrollToContacts"
          >
          Book an online
        </button>
      </div>
    </header>

    <header
      v-else
      class="flex justify-between items-center mx-[7%] py-3.5 text-white"
    >
    <div class="h-[46px] flex justify-center">
        <router-link to="/">
          <LogoSvg :class="textWhite ? 'text-white' : 'text-blue'"></LogoSvg>
        </router-link>
      </div>

      <div class="relative">
        <button @click="expand">
          <BurgerSvg class="w-10 h-10"></BurgerSvg>
        </button>

        <div
          v-if="dropdown"
          class="absolute z-20 bg-white p-2 rounded-lg shadow-4x10 w-32 right-0"
        >
          <nav class="text-xl text-black">
            <div>
              <router-link
                to="/"
                class="flex justify-between items-center gap-3"
              >
                <span
                  class="w-24"
                  :class="currentPage === 'home' ? 'font-bold' : ''"
                  >Home</span
                >
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>

            <div class="mt-2">
              <router-link
                to="/services"
                class="flex justify-between items-center gap-3"
              >
                <span
                  class="w-24"
                  :class="currentPage === 'services' ? 'font-bold' : ''"
                  >Services</span
                >
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>

            <div class="mt-2">
              <router-link
                to="#"
                class="flex justify-between items-center gap-3"
              >
                <span
                  class="w-24"
                  :class="currentPage === 'about us' ? 'font-bold' : ''"
                  >About us</span
                >
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>

            <div class="mt-2">
              <router-link
                to="#"
                class="flex justify-between items-center gap-3"
              >
                <span
                  class="w-24"
                  :class="currentPage === 'team' ? 'font-bold' : ''"
                  >Team</span
                >
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>

            <div class="mt-2">
              <router-link
                to="#"
                class="flex justify-between items-center gap-3"
              >
                <span
                  class="w-24"
                  :class="currentPage === 'contact' ? 'font-bold' : ''"
                  >Contact</span
                >
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>

            <div class="mt-2">
              <router-link
                to="/blogs"
                class="flex justify-between items-center gap-3"
              >
                <span
                  class="w-24"
                  :class="currentPage === 'blog' ? 'font-bold' : ''"
                  >Blog</span
                >
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>

            <div class="mt-2">
              <router-link
                to="#"
                class="flex justify-between items-center gap-3"
              >
                <span class="w-24">Book an online</span>
                <RightArrow class="w-[7px] h-3 inline"></RightArrow>
              </router-link>
            </div>
          </nav>
        </div>
      </div>
    </header>
  </div>
</template>

<script>
import LogoSvg from "./svg/LogoSvg.vue";
import BurgerSvg from "./svg/BurgerSvg.vue";
import RightArrow from "./svg/RightArrow.vue";
export default {
  name: "HeaderComponent",
  data() {
    return {
      width: window.innerWidth,
      dropdown: false,
      firstClick: true,
    };
  },
  props: {
    currentPage: {
      type: String,
    },
    transparent: {
      type: Boolean,
      default: false,
    },
    withShadow: {
      type: Boolean,
      default: false,
    },
    textWhite: {
      type: Boolean,
      default: false,
    },
  },
  mounted() {
    window.addEventListener("resize", this.onWidthChange);
    this.onWidthChange();
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.onWidthChange);
  },
  methods: {
    onWidthChange() {
      this.width = window.innerWidth;
    },
    expand() {
      this.dropdown = true;
      this.firstClick = true;
      this.$nextTick(() => {
        document.addEventListener("click", this.hide);
      });
    },
    hide() {
      if (this.firstClick) {
        this.firstClick = false;
        return;
      }
      this.dropdown = false;
      document.removeEventListener("click", this.hide);
    },
    scrollToContacts(){
      this.$emit('onButtonClick')
    }
  },
  components: { LogoSvg, BurgerSvg, RightArrow },
};
</script>