The Helmholtz Association of German Research Centres is the largest scientific organisation in Germany. The relaunch included a complete rewrite of the frontend using the BEM methodology for HTML / CSS, Vanilla JS for interactive elements, Preact for a headless SOLR search and the GSAP animation library for storytelling.
helmholtz.deHelmholtz Relaunch
Frontend-Development, HTML, CSS with SASS, Vanilla JS (ES6), Preact, GSAP, Typo3
Client: 3pc
-
Responsive Fluid Frontend
-
Modular SCSS with BEM
-
Headless SOLR Search with Preact
useEffect(() => { // if isOpen is true, prevent scoll on body element if (isOpen) { document.body.classList.add('nav-is-open'); } else { document.body.classList.remove('nav-is-open'); } }, [isOpen]); useEffect(() => { const hasActiveFilter = element => element.selected; const hasActiveFilters = facet.options.some(hasActiveFilter); setIsActive(hasActiveFilters); }, [facet, isOpen]);
-
GSAP Storytelling Page
ScrollTrigger.create({ animation: tl, trigger: storyHeaderWrapper, pin: viewport.isDesktop ? true : viewport.isTablet ? true : viewport.isMobile ? false : '', start: () => viewport.isDesktop ? '-99' : viewport.isTablet ? '-89' : viewport.isMobile ? '-81' : '', end: () => 'bottom top', toggleActions: 'play pause resume reset', scrub: 1, invalidateOnRefresh: true, onUpdate: self => progress(self), onLeave: () => { video.pause(); }, onEnterBack: () => { video.play(); }, });
-
Vanilla JS Interactive Elements
createSlider = () => { // configure Swiper to use modules Swiper.use([Navigation, Scrollbar, Pagination]); const swiperDefaultConfig = { scrollbar: { el: $('.swiper-scrollbar', this.container), hide: false, draggable: true, }, navigation: { nextEl: $('.swiper-button--next', this.container), prevEl: $('.swiper-button--previous', this.container), }, mousewheel: false, watchOverflow: true, slidesPerView: 'auto', watchSlidesProgress: true, speed: 400, on: { init: swiper => { this.onReady && this.onReady(swiper); }, }, }; const sliderConfig = merge(swiperDefaultConfig, this.sliderOptions); this.swiper = new Swiper(this.target, sliderConfig); };