GreenShift Tips and Tutorials

Helper Icon Hider Script

Ivan
Ivan
 · 
This JS snippet complements the work done with Interaction Layers to show/hide various helper icons (cookie notices, chat widgets, back to top buttons, etc.) so that they do not cover the footer area.
// Configurationa
const triggerClassName = 'footer-in-view';
const triggerElementSelector = 'footer';
const targetIds = [];
const targetClasses = ['mhcookie-preferences-toggle'];

// Observer
const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    if (mutation.type === 'attributes') {
      const trigger = mutation.target;
      console.log('Class change detected:', trigger.classList);
      
      if (trigger.classList.contains(triggerClassName)) {
        console.log('Footer in view - hiding targets');
        targetIds.forEach(id => {
          const el = document.getElementById(id);
          el?.classList.remove('gs-show');
          el?.classList.add('gs-hide');
        });
        targetClasses.forEach(className => {
          const elements = document.getElementsByClassName(className);
          console.log('Found elements:', elements.length);
          Array.from(elements).forEach(el => {
            el.classList.remove('gs-show');
            el.classList.add('gs-hide');
          });
        });
      } else {
        console.log('Footer out of view - showing targets');
        targetIds.forEach(id => {
          const el = document.getElementById(id);
          el?.classList.remove('gs-hide');
          el?.classList.add('gs-show');
        });
        targetClasses.forEach(className => {
          const elements = document.getElementsByClassName(className);
          Array.from(elements).forEach(el => {
            el.classList.remove('gs-hide');
            el.classList.add('gs-show');
          });
        });
      }
    }
  });
});

// Initialize
document.addEventListener('DOMContentLoaded', function() {
  console.log('Initializing...');
  
  // Initialize target elements with gs-show
  targetIds.forEach(id => {
    document.getElementById(id)?.classList.add('gs-show');
  });
  targetClasses.forEach(className => {
    const elements = document.getElementsByClassName(className);
    console.log('Initializing class:', className, 'found:', elements.length);
    Array.from(elements).forEach(el => el.classList.add('gs-show'));
  });
  
  // Start observing
  const triggerElement = document.querySelector(triggerElementSelector);
  observer.observe(triggerElement, { 
    attributes: true
  });
});
JavaScript
This code snippet is used in the following tutorial(s):

This website uses cookies to enhance your browsing experience and ensure the site functions properly. By continuing to use this site, you acknowledge and accept our use of cookies.

Accept All Accept Required Only