import $ from "jquery"; class IHKMagazineHeader { constructor(header) { this.header = header.addClass('initiated'); this.gradient = header.find('.gradient'); this.title = header.find('.title'); this.window = $(window); this.minScale = 0; this.preventResize = false; this.initSizeObserver(); this.initScroll(); $('body') .on('overlay-open', () => { this.preventResize = true; }) .on('overlay-close', () => { this.preventResize = false; }) } initSizeObserver() { const observer = new ResizeObserver(() => { this.getMinScale(); }) observer.observe(this.header.get(0)); } initScroll() { window.addEventListener("scroll", () => { window.requestAnimationFrame( () => { if (!this.preventResize) { this.checkScroll(); } }) },{passive: true}); this.checkScroll(); }; checkScroll() { const st = this.window.scrollTop(); let scale = 1 - Math.round(st / 4) / 100; const opacity = 1 - Math.round(st / 2) / 100; if (scale < 0) { scale = 0; } this.gradient.css({'transform': 'scale(1, ' + (scale > this.minScale ? scale : this.minScale) + ')'}); this.title.css({ 'transform': 'translate(-50%, -50%) scale(' + scale + ')', 'opacity': opacity > 0 ? opacity : 0 }) } getMinScale() { this.minScale = Math.round(1000 / this.header.outerHeight()) / 100; } } export default IHKMagazineHeader; $('body').on('ihk-init dynamic-component-loaded gfi-dynamic-init', function () { const body = $(this); $('.magazine-header:not(.initiated)').each(function(i) { new IHKMagazineHeader($(this)); }); })