opentalent_manager.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <LayoutNavigation />
  3. <LogicielsManagerBanner />
  4. <LogicielsManagerMenuScroll />
  5. <div v-if="shouldShowStickyMenu" id="sticky-menu">
  6. <LayoutUIStickyMenu
  7. :shouldShowStickyMenu="shouldShowStickyMenu"
  8. :squaresData="squaresData"
  9. />
  10. </div>
  11. <LogicielsManagerPresentation />
  12. <LogicielsManagerAvantages />
  13. <LogicielsManagerFonctionnalites />
  14. <LogicielsManagerPyramide />
  15. <LogicielsManagerAccompagnement />
  16. <LogicielsManagerReviews />
  17. <LayoutFAQ />
  18. <LayoutUISolutionsFooter id="layout-footer" />
  19. <LayoutFooter />
  20. </template>
  21. <script setup>
  22. import { ref, onMounted } from "vue";
  23. const shouldShowStickyMenu = ref(true);
  24. const squaresData = [
  25. {
  26. id: 1,
  27. bgColor: "red-square",
  28. iconClass: "fa-regular fa-comments icon",
  29. text: "Nous contacter",
  30. },
  31. {
  32. id: 2,
  33. bgColor: "red-square",
  34. iconClass: "fa-brands fa-readme icon",
  35. text: "Brochure",
  36. },
  37. {
  38. id: 3,
  39. bgColor: "darkblue-square",
  40. iconClass: "fa-solid fa-phone icon",
  41. text: "Nous appeler",
  42. }
  43. ];
  44. onMounted(() => {
  45. const stickyMenu = document.getElementById("sticky-menu");
  46. const footer = document.getElementById("layout-footer");
  47. const observer = new IntersectionObserver(
  48. ([entry]) => {
  49. shouldShowStickyMenu.value = !entry.isIntersecting;
  50. },
  51. {
  52. root: null,
  53. threshold: 0,
  54. }
  55. );
  56. observer.observe(footer);
  57. });
  58. </script>
  59. <style scoped>
  60. #sticky-menu {
  61. position: sticky;
  62. top: 20rem;
  63. z-index: 1;
  64. margin-bottom: -30rem;
  65. float: right;
  66. }
  67. </style>