opentalent_artist.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <LayoutNavigation />
  3. <LogicielsArtistBanner />
  4. <LogicielsArtistMenuScroll />
  5. <div v-if="shouldShowStickyMenu" id="sticky-menu">
  6. <LayoutUIStickyMenu
  7. :shouldShowStickyMenu="shouldShowStickyMenu"
  8. :squaresData="squaresData"
  9. />
  10. </div>
  11. <LogicielsArtistPresentation/>
  12. <LogicielsArtistAvantages />
  13. <LogicielsArtistFonctionnalites />
  14. <LogicielsArtistComparatif />
  15. <LogicielsArtistAbonnement/>
  16. <LogicielsArtistFormations />
  17. <LogicielsArtistReviews />
  18. <LayoutFAQ id="layout-footer"/>
  19. <LayoutUISolutionsFooter id="layout-footer" />
  20. <LayoutFooter id="layout-footer"/>
  21. </template>
  22. <script setup>
  23. import { ref, onMounted } from "vue";
  24. const shouldShowStickyMenu = ref(true);
  25. const squaresData = [
  26. {
  27. id: 1,
  28. bgColor: "yellow-square",
  29. iconClass: "fa-regular fa-comments icon",
  30. text: "Nous contacter",
  31. },
  32. {
  33. id: 2,
  34. bgColor: "yellow-square",
  35. iconClass: "fa-solid fa-circle-info icon",
  36. text: "Demander une demo",
  37. }
  38. ];
  39. onMounted(() => {
  40. const stickyMenu = document.getElementById("sticky-menu");
  41. const footer = document.getElementById("layout-footer");
  42. const observer = new IntersectionObserver(
  43. ([entry]) => {
  44. shouldShowStickyMenu.value = !entry.isIntersecting;
  45. },
  46. {
  47. root: null,
  48. threshold: 0,
  49. }
  50. );
  51. observer.observe(footer);
  52. });
  53. </script>
  54. <style scoped>
  55. #sticky-menu {
  56. position: sticky;
  57. top: 20rem;
  58. z-index: 1;
  59. margin-bottom: -30rem;
  60. float: right;
  61. }
  62. </style>