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