25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

81 lines
2.4 KiB

const intersectionObserverRegistry = new Object();
function setIntersectionObserverRegistry(parametre, valeur)
{
  intersectionObserverRegistry[parametre] = valeur;
}
function getIntersectionObserverRegistry(parametre)
{
  return intersectionObserverRegistry[parametre];
}
function entryVisiblity(_id, _visible) {
    let entry=getIntersectionObserverRegistry(_id);
    if (entry) return entry(_visible);
    return consoleLog(_id, _visible)
}
// Create a function that will handle any intersection between some elements and the viewport.
const handleIntersectionObserverEntries = function (entries) {
  entries.forEach(entry => {
    if (typeof entryVisiblity === 'function') entryVisiblity(entry.target.id, entry.isIntersecting);
  });
}
const intersectionObserver = new IntersectionObserver(handleIntersectionObserverEntries);
function addIntersectionObserverEntry(_id, _func)
{
    let item = document.querySelector('#'+_id);
    if ((item) && (intersectionObserver)) {
        setIntersectionObserverRegistry(_id, _func);
        intersectionObserver.observe(item);
    }
}
function consoleLog(_id, _visible) {
    if (_visible) {
        console.log(_id + ' is Visible');
    } else {
        console.log(_id + ' is NOT Visible');
    }
}
function scrollToElement(elementSelector) {
    let element = document.querySelector(elementSelector);
    if (element) element.scrollIntoView({ behavior: 'smooth' });
}
function beforeHeaderVisibility(_visible) {
    console.log('TRIGGER beforeHeaderVisibility');
    if (_visible) {
        console.log('HEADER is Visible');
    } else {
        console.log('HEADER is NOT Visible');
        scrollToElement('#before_nav');
    }
}
function afterHeaderVisibility(_visible) {
    console.log('TRIGGER afterHeaderVisibility');
    if (_visible) {
        scrollToElement('#before_header');
    } else {
        console.log('HEADER is NOT Visible');
    }
}
function beforeNavVisibility(_visible) {
    console.log('TRIGGER beforeNavVisibility');
    let synthese=document.querySelector('#synthese');
    if (synthese) {
        if (_visible) {
            synthese.style.display="block";
        } else {
            synthese.style.display="none";
        }
    }
}
/*
addIntersectionObserverEntry("before_header", beforeHeaderVisibility);
addIntersectionObserverEntry("after_header", afterHeaderVisibility);
addIntersectionObserverEntry("before_nav", beforeNavVisibility);
*/