header.vue 4.0 KB

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