functions-new-landing.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. jQuery(document).ready(function($) {
  2. (function() {
  3. const sections = [
  4. document.getElementById('ch-ggs-web-suite-section-01'),
  5. document.getElementById('ch-ggs-web-suite-section-02'),
  6. document.getElementById('ch-ggs-web-suite-section-03'),
  7. ];
  8. const navItems = {
  9. 'ch-ggs-web-suite-section-01': document.getElementById('ch-ggs-web-suite-nav-item-01'),
  10. 'ch-ggs-web-suite-section-02': document.getElementById('ch-ggs-web-suite-nav-item-02'),
  11. 'ch-ggs-web-suite-section-03': document.getElementById('ch-ggs-web-suite-nav-item-03'),
  12. };
  13. // intersection observer setup
  14. const observerOptions = {
  15. root: null,
  16. rootMargin: '0px',
  17. threshold: 0.7,
  18. };
  19. function observerCallback(entries, observer) {
  20. entries.forEach((entry) => {
  21. if (entry.isIntersecting) {
  22. // get the nav item corresponding to the id of the section
  23. // that is currently in view
  24. const navItem = navItems[entry.target.id];
  25. // add 'active' class on the navItem
  26. navItem.classList.add('active');
  27. // remove 'active' class from any navItem that is not
  28. // same as 'navItem' defined above
  29. Object.values(navItems).forEach((item) => {
  30. if (item != navItem) {
  31. item.classList.remove('active');
  32. }
  33. });
  34. }
  35. });
  36. }
  37. const observer = new IntersectionObserver(observerCallback, observerOptions);
  38. sections.forEach((sec) => observer.observe(sec));
  39. })();
  40. (function() {
  41. const sentinelEl = document.getElementById('ch-ggs-web-suite-landing-nav-trigger');
  42. const headerEl = document.getElementById('ch-ggs-web-suite-landing-nav');
  43. const stuckClass = 'stuck';
  44. const handler = (entries) => {
  45. if (headerEl) {
  46. if (!entries[0].isIntersecting) {
  47. headerEl.classList.add(stuckClass);
  48. } else {
  49. headerEl.classList.remove(stuckClass);
  50. }
  51. }
  52. }
  53. const observer = new window.IntersectionObserver(handler);
  54. observer.observe(sentinelEl);
  55. })();
  56. })