class BreadcrumbComponent extends HTMLElement {
            constructor() {
                super();
            }
            connectedCallback() {
                this.firstLink = this.querySelector(‘.link.home-link’)
                this.lastLink = this.querySelector(‘.observe-element’)
                this.classList.add(‘initialized’);
                this.initObservers();
            }
            static createHandler(position = ‘first’, breadcrumb = null) {
                const handler = (entries, observer) => {
                    entries.forEach(entry => {
                        if (breadcrumb == null) return observer.disconnect();
                        if (entry.isIntersecting ) {
                            breadcrumb.classList.add(`disable-${position}`);
                        } else {
                            breadcrumb.classList.remove(`disable-${position}`);
                        }
                    })
                }
                return handler;
            }
            initObservers() {
                const scrollToFirstHandler = BreadcrumbComponent.createHandler(‘first’, this);
                const scrollToLastHandler = BreadcrumbComponent.createHandler(‘last’, this);
                this.scrollToFirstObserver = new IntersectionObserver(scrollToFirstHandler, { threshold: 1 });
                this.scrollToLastObserver = new IntersectionObserver(scrollToLastHandler, { threshold: 0.6 });
                this.scrollToFirstObserver.observe(this.firstLink);
                this.scrollToLastObserver.observe(this.lastLink);
            }
        }   
        window.addEventListener(‘load’, () => {
            customElements.define(‘breadcrumb-component’, BreadcrumbComponent);
        })
 
Reviews
There are no reviews yet