header.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <header>
  3. <div class="header--wrap" :class="{ 'white': isScrolled }">
  4. <div class="header--container">
  5. <NuxtLink class="logo--wrap" to="/">그린웨일글로벌</NuxtLink>
  6. <ul class="menu--wrap">
  7. <li class="menu--item">
  8. <NuxtLink to="/company/intro">Company</NuxtLink>
  9. <ul class="gnb--wrap">
  10. <li><NuxtLink to="/company/intro">회사소개</NuxtLink></li>
  11. <li><NuxtLink to="/company/history">회사연혁</NuxtLink></li>
  12. <li><NuxtLink to="/company/partners">협력업체</NuxtLink></li>
  13. </ul>
  14. </li>
  15. <li class="menu--item">
  16. <NuxtLink to="/products/materials">Products</NuxtLink>
  17. <ul class="gnb--wrap">
  18. <li><NuxtLink to="/products/materials">Materials</NuxtLink></li>
  19. <li><NuxtLink to="/products/solutions">Solutions</NuxtLink></li>
  20. </ul>
  21. </li>
  22. <li class="menu--item">
  23. <NuxtLink to="/technology/facilities">Technology</NuxtLink>
  24. <ul class="gnb--wrap">
  25. <li><NuxtLink to="/technology/facilities">시설</NuxtLink></li>
  26. <li><NuxtLink to="/technology/patents">특허 / 인증</NuxtLink></li>
  27. </ul>
  28. </li>
  29. <li class="menu--item">
  30. <NuxtLink to="/media/news">Media</NuxtLink>
  31. <ul class="gnb--wrap">
  32. <li><NuxtLink to="/media/news">환경뉴스</NuxtLink></li>
  33. <li><NuxtLink to="/media/press">보도자료</NuxtLink></li>
  34. </ul>
  35. </li>
  36. <li class="menu--item">
  37. <NuxtLink to="/contact/notice">Contact</NuxtLink>
  38. <ul class="gnb--wrap">
  39. <li><NuxtLink to="/contact/notice">공지사항</NuxtLink></li>
  40. <li><NuxtLink to="/contact/faq">FAQ</NuxtLink></li>
  41. <li><NuxtLink to="/contact/support">고객센터</NuxtLink></li>
  42. <li><NuxtLink to="/contact/location">오시는길</NuxtLink></li>
  43. </ul>
  44. </li>
  45. </ul>
  46. <div class="lang--wrap" :class="{ 'active': isLangOpen }" @click="toggleLang" ref="langWrap">
  47. <i class="ico"></i>
  48. <p>KR</p>
  49. <ul class="select--wrap">
  50. <li>Arabic</li>
  51. <li>Chinese (Simplified)</li>
  52. <li>Chinese (Traditional)</li>
  53. <li>English</li>
  54. <li>Esperanto</li>
  55. <li>French</li>
  56. </ul>
  57. </div>
  58. </div>
  59. </div>
  60. </header>
  61. </template>
  62. <script setup>
  63. import { ref, onMounted, onUnmounted } from 'vue'
  64. const isScrolled = ref(false)
  65. const isLangOpen = ref(false)
  66. const langWrap = ref(null)
  67. const handleScroll = () => {
  68. isScrolled.value = window.scrollY > 0
  69. }
  70. const toggleLang = () => {
  71. isLangOpen.value = !isLangOpen.value
  72. }
  73. const handleClickOutside = (event) => {
  74. if (langWrap.value && !langWrap.value.contains(event.target)) {
  75. isLangOpen.value = false
  76. }
  77. }
  78. onMounted(() => {
  79. window.addEventListener('scroll', handleScroll)
  80. document.addEventListener('click', handleClickOutside)
  81. })
  82. onUnmounted(() => {
  83. window.removeEventListener('scroll', handleScroll)
  84. document.removeEventListener('click', handleClickOutside)
  85. })
  86. </script>