Zu Inhalt springen
Kostenloser Versand für Bestellungen über 2500 € in Deutschland! Europaweiter Versand möglich!
Kostenloser Versand für Bestellungen über 2500 €
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = (function() { const modules = {}; /* Module 646: CSSBreakpoints (Desktop-anpassung) */ modules[646] = function(module) { "use strict"; class CSSBreakpoint { /* Wie zuvor */ } function readCSSBreakpoints() { /* Wie zuvor */ } function readCSSCurrentBreakpoint() { /* Wie zuvor */ } const breakpoints = { previous: new CSSBreakpoint(readCSSCurrentBreakpoint()), current: new CSSBreakpoint(readCSSCurrentBreakpoint()) }; let callbacks = []; function get() { return breakpoints; } function onChange(cb) { if (!callbacks.includes(cb)) callbacks.push(cb); } function offChange(cb) { const idx = callbacks.indexOf(cb); if (idx !== -1) callbacks.splice(idx, 1); } const mediaLists = /* Wie zuvor */; if (mediaLists.length > 0) { mediaLists.forEach(media => { const mql = window.matchMedia(media.mediaText); mql.addListener(debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); // Kürzere Debounce-Zeit für Desktop }); } else { window.addEventListener('resize', debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); } module.exports = { get, onChange, offChange, CSSBreakpoint, breakpoints }; }; /* Module 263: GroupedContent (Virtuelles DOM für Desktop) */ modules[263] = function(module) { "use strict"; function forEach(array, cb, scope) { for (let i = 0; i < array.length; i++) cb.call(scope, array[i], i); } function hasClass(el, className) { /* Wie zuvor */ } function addClass(el, className) { /* Wie zuvor */ } function removeClass(el, className) { /* Wie zuvor */ } function toggleClass(el, className) { /* Wie zuvor */ } function findPairingFromPairingTrigger(pairings, trigger) { /* Wie zuvor */ } function uuidv4() { /* Wie zuvor */ } class TabsLayout { /* Wie zuvor */ } class AccordionLayout { /* Wie zuvor */ } function getHeadingContent(heading) { /* Wie zuvor */ } function getHeadingTree(el, children, root = false) { /* Wie zuvor */ } function getHeadingGroups(headings, invalid, minSeq) { /* Wie zuvor */ } function createGroupedContent(children) { const pairings = []; const fragment = document.createDocumentFragment(); const triggers = document.createElement('div'); const contents = document.createElement('div'); const first = children[0].el; fragment.appendChild(triggers); fragment.appendChild(contents); first.parentNode.insertBefore(fragment, first); for (let i = 0; i < children.length; i++) { const child = children[i]; const trigger = triggers.appendChild(child.el.cloneNode(true)); const content = contents.appendChild(document.createElement('div')); content.append(...child.content); pairings.push({ trigger, content }); } return { triggers, contents, pairings }; } function getGroupedContentSet(node) { /* Wie zuvor, mit Filterung */ } function intelliParse(el) { /* Wie zuvor */ } function staticParse(el) { /* Wie zuvor */ } function parse(content, intelli = false) { return intelli ? intelliParse(content) : staticParse(content); } class GroupedContent { constructor(el, options = {}) { this.namespace = 'grouped-content'; this.el = el; this.instances = []; const { layout = 'tabs', intelliparse = false } = options; const parsed = parse(el, intelliparse).filter(gc => gc.pairings.length > 1); forEach(parsed, gc => { const id = uuidv4(); const instance = layout === 'accordion' ? new AccordionLayout(gc) : new TabsLayout(gc); this.instances.push({ gc, instance }); }); } unload() { forEach(this.instances, ({ instance }) => instance.unload()); } } module.exports = GroupedContent; }; /* Module ShoppableImage (Desktop-spezifische Bildoptimierung) */ modules['shoppable'] = function() { class ShoppableImage { constructor(section) { this.el = section.el; this.events = new (require(766).default)(); this.activeClass = 'shoppable-image__hotspot--active'; this.delay = 200; // Kürzere Verzögerung für Desktop this._bind(); this._optimizeImages(); } _bind() { /* Wie zuvor */ } _setActive(e) { e.stopPropagation(); const point = e.target.closest('[data-hotspot]'); if (!point) return; if (['touchend', 'click'].includes(e.type) && point.classList.contains(this.activeClass)) { point.classList.remove(this.activeClass); return; } document.querySelectorAll(`.${this.activeClass}`).forEach(el => el.classList.remove(this.activeClass)); point.classList.add(this.activeClass); const img = point.querySelector('img'); if (img) { img.setAttribute('loading', 'eager'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 300); img.setAttribute('height', img.naturalHeight || 300); } } } _optimizeImages() { this.el.querySelectorAll('[data-hotspot] img').forEach(img => { if (!img.closest('.shoppable-image__hotspot--active')) { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('srcset')) img.setAttribute('srcset', `${img.src} 1x, ${img.src.replace(/\.[^.]+$/, '_2x.$&')} 2x`); } }); } unload() { this.events.unregisterAll(); } } return ShoppableImage; }; /* Module DynamicTestimonials (Desktop-Anpassung) */ modules['dynamic-testimonials'] = function() { class DynamicTestimonials { constructor(section) { this.$el = section.el; this.events = new (require(766).default)(); this.carousel = this.$el.querySelector('.testimonials'); this.onChange = debounce(() => { const slides = this.$el.querySelectorAll('.testimonial'); const shouldInit = (require(646).breakpoints.current.min('M') && slides.length > 2) || // Desktop-spezifische Bedingung (require(646).breakpoints.current.min('XL') && slides.length > 3); if (shouldInit && !this.flickity) this._initFlickity(); else if (!shouldInit && this.flickity) this._destroyFlickity(); }, 50); require(646).onChange(this.onChange); this._optimizeImages(); this.onChange(); } _optimizeImages() { this.$el.querySelectorAll('.testimonial img').forEach(img => { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 400); img.setAttribute('height', img.naturalHeight || 300); } }); } onSectionUnload() { /* Wie zuvor */ } _initFlickity() { /* Wie zuvor */ } _destroyFlickity() { /* Wie zuvor */ } } return DynamicTestimonials; }; /* Module Order (Web Worker für Desktop) */ modules['order'] = function() { class Order { constructor() { this.el = document.querySelector('.template-order'); this.events = new (require(766).default)(); this.worker = null; this._init(); } _init() { if (typeof(Worker) !== 'undefined' && require(646).breakpoints.current.min('L')) { this.worker = new Worker(URL.createObjectURL(new Blob([` self.onmessage = function(e) { fetch(e.data.url).then(r => r.json()).then(d => self.postMessage(d)); }; `], { type: 'text/javascript' }))); this.worker.onmessage = (e) => this._onSuccess(e.data); } this.events.register(this.el.querySelector('[data-atc-button]'), 'click', e => this._addToCart(e)); } _addToCart(e) { e.stopPropagation(); this.el.querySelector('[data-atc-button]').classList.add('processing'); const url = `${window.Theme.routes.cart_add_url}.js`; if (this.worker) this.worker.postMessage({ url, method: 'POST', body: JSON.stringify({ items: [] }) }); else fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [] }) }) .then(r => r.json()).then(d => this._onSuccess()).catch(e => this._showError(e.message)); } _onSuccess(data) { fetch(`${window.Theme.routes.cart_url}.js`).then(r => r.json()).then(d => { const evt = new CustomEvent('cartcount:update', { detail: d }); window.dispatchEvent(evt); }).catch(e => this._showError(e.message)); } _showError(msg) { console.log(msg); } unload() { if (this.worker) this.worker.terminate(); this.events.unregisterAll(); } } return Order; }; /* Weitere Module (Unverändert, aber mit Desktop-Anpassungen) */ modules['product-compare-flyout'] = function() { /* Wie zuvor */ }; modules['back-to-top'] = function() { /* Wie zuvor */ }; /* Helper Functions */ function debounce(fn, wait) { /* Wie zuvor */ } function throttle(fn, limit) { /* Wie zuvor */ } function isInViewport(el) { /* Wie zuvor */ } /* Main Initialization */ function initEmpire() { require(970); // Revealer require(186); // Trend const sections = new Map(); sections.set('shoppable-image', el => new (require('shoppable').default)({ el, id: el.dataset.sectionId })); sections.set('grouped-content', el => new (require(263).default)(el, { intelliparse: true })); sections.set('dynamic-testimonials', el => new (require('dynamic-testimonials').default)({ el, id: el.dataset.sectionId })); sections.set('order', () => new (require('order').default)()); sections.set('product-compare-flyout', el => new (require('product-compare-flyout').default)(el)); sections.set('back-to-top', el => new (require('back-to-top').default)(el)); document.querySelectorAll('[data-section-type]').forEach(el => { const type = el.dataset.sectionType; if (sections.has(type)) { if (require(646).breakpoints.current.min('L') && ['product-compare-flyout', 'back-to-top'].includes(type) && !isInViewport(el)) { const observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { sections.get(type)(el); observer.unobserve(el); } }, { rootMargin: '100px' }); observer.observe(el); } else { sections.get(type)(el); } } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initEmpire); } else { initEmpire(); } return modules; })(); /******/ var __webpack_module_cache__ = {}; /******/ function __webpack_require__(moduleId) { /* Wie zuvor */ } /******/ var __webpack_exports__ = __webpack_require__(263); /******/ })();
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = (function() { const modules = {}; /* Module 646: CSSBreakpoints (Desktop-anpassung) */ modules[646] = function(module) { "use strict"; class CSSBreakpoint { /* Wie zuvor */ } function readCSSBreakpoints() { /* Wie zuvor */ } function readCSSCurrentBreakpoint() { /* Wie zuvor */ } const breakpoints = { previous: new CSSBreakpoint(readCSSCurrentBreakpoint()), current: new CSSBreakpoint(readCSSCurrentBreakpoint()) }; let callbacks = []; function get() { return breakpoints; } function onChange(cb) { if (!callbacks.includes(cb)) callbacks.push(cb); } function offChange(cb) { const idx = callbacks.indexOf(cb); if (idx !== -1) callbacks.splice(idx, 1); } const mediaLists = /* Wie zuvor */; if (mediaLists.length > 0) { mediaLists.forEach(media => { const mql = window.matchMedia(media.mediaText); mql.addListener(debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); // Kürzere Debounce-Zeit für Desktop }); } else { window.addEventListener('resize', debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); } module.exports = { get, onChange, offChange, CSSBreakpoint, breakpoints }; }; /* Module 263: GroupedContent (Virtuelles DOM für Desktop) */ modules[263] = function(module) { "use strict"; function forEach(array, cb, scope) { for (let i = 0; i < array.length; i++) cb.call(scope, array[i], i); } function hasClass(el, className) { /* Wie zuvor */ } function addClass(el, className) { /* Wie zuvor */ } function removeClass(el, className) { /* Wie zuvor */ } function toggleClass(el, className) { /* Wie zuvor */ } function findPairingFromPairingTrigger(pairings, trigger) { /* Wie zuvor */ } function uuidv4() { /* Wie zuvor */ } class TabsLayout { /* Wie zuvor */ } class AccordionLayout { /* Wie zuvor */ } function getHeadingContent(heading) { /* Wie zuvor */ } function getHeadingTree(el, children, root = false) { /* Wie zuvor */ } function getHeadingGroups(headings, invalid, minSeq) { /* Wie zuvor */ } function createGroupedContent(children) { const pairings = []; const fragment = document.createDocumentFragment(); const triggers = document.createElement('div'); const contents = document.createElement('div'); const first = children[0].el; fragment.appendChild(triggers); fragment.appendChild(contents); first.parentNode.insertBefore(fragment, first); for (let i = 0; i < children.length; i++) { const child = children[i]; const trigger = triggers.appendChild(child.el.cloneNode(true)); const content = contents.appendChild(document.createElement('div')); content.append(...child.content); pairings.push({ trigger, content }); } return { triggers, contents, pairings }; } function getGroupedContentSet(node) { /* Wie zuvor, mit Filterung */ } function intelliParse(el) { /* Wie zuvor */ } function staticParse(el) { /* Wie zuvor */ } function parse(content, intelli = false) { return intelli ? intelliParse(content) : staticParse(content); } class GroupedContent { constructor(el, options = {}) { this.namespace = 'grouped-content'; this.el = el; this.instances = []; const { layout = 'tabs', intelliparse = false } = options; const parsed = parse(el, intelliparse).filter(gc => gc.pairings.length > 1); forEach(parsed, gc => { const id = uuidv4(); const instance = layout === 'accordion' ? new AccordionLayout(gc) : new TabsLayout(gc); this.instances.push({ gc, instance }); }); } unload() { forEach(this.instances, ({ instance }) => instance.unload()); } } module.exports = GroupedContent; }; /* Module ShoppableImage (Desktop-spezifische Bildoptimierung) */ modules['shoppable'] = function() { class ShoppableImage { constructor(section) { this.el = section.el; this.events = new (require(766).default)(); this.activeClass = 'shoppable-image__hotspot--active'; this.delay = 200; // Kürzere Verzögerung für Desktop this._bind(); this._optimizeImages(); } _bind() { /* Wie zuvor */ } _setActive(e) { e.stopPropagation(); const point = e.target.closest('[data-hotspot]'); if (!point) return; if (['touchend', 'click'].includes(e.type) && point.classList.contains(this.activeClass)) { point.classList.remove(this.activeClass); return; } document.querySelectorAll(`.${this.activeClass}`).forEach(el => el.classList.remove(this.activeClass)); point.classList.add(this.activeClass); const img = point.querySelector('img'); if (img) { img.setAttribute('loading', 'eager'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 300); img.setAttribute('height', img.naturalHeight || 300); } } } _optimizeImages() { this.el.querySelectorAll('[data-hotspot] img').forEach(img => { if (!img.closest('.shoppable-image__hotspot--active')) { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('srcset')) img.setAttribute('srcset', `${img.src} 1x, ${img.src.replace(/\.[^.]+$/, '_2x.$&')} 2x`); } }); } unload() { this.events.unregisterAll(); } } return ShoppableImage; }; /* Module DynamicTestimonials (Desktop-Anpassung) */ modules['dynamic-testimonials'] = function() { class DynamicTestimonials { constructor(section) { this.$el = section.el; this.events = new (require(766).default)(); this.carousel = this.$el.querySelector('.testimonials'); this.onChange = debounce(() => { const slides = this.$el.querySelectorAll('.testimonial'); const shouldInit = (require(646).breakpoints.current.min('M') && slides.length > 2) || // Desktop-spezifische Bedingung (require(646).breakpoints.current.min('XL') && slides.length > 3); if (shouldInit && !this.flickity) this._initFlickity(); else if (!shouldInit && this.flickity) this._destroyFlickity(); }, 50); require(646).onChange(this.onChange); this._optimizeImages(); this.onChange(); } _optimizeImages() { this.$el.querySelectorAll('.testimonial img').forEach(img => { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 400); img.setAttribute('height', img.naturalHeight || 300); } }); } onSectionUnload() { /* Wie zuvor */ } _initFlickity() { /* Wie zuvor */ } _destroyFlickity() { /* Wie zuvor */ } } return DynamicTestimonials; }; /* Module Order (Web Worker für Desktop) */ modules['order'] = function() { class Order { constructor() { this.el = document.querySelector('.template-order'); this.events = new (require(766).default)(); this.worker = null; this._init(); } _init() { if (typeof(Worker) !== 'undefined' && require(646).breakpoints.current.min('L')) { this.worker = new Worker(URL.createObjectURL(new Blob([` self.onmessage = function(e) { fetch(e.data.url).then(r => r.json()).then(d => self.postMessage(d)); }; `], { type: 'text/javascript' }))); this.worker.onmessage = (e) => this._onSuccess(e.data); } this.events.register(this.el.querySelector('[data-atc-button]'), 'click', e => this._addToCart(e)); } _addToCart(e) { e.stopPropagation(); this.el.querySelector('[data-atc-button]').classList.add('processing'); const url = `${window.Theme.routes.cart_add_url}.js`; if (this.worker) this.worker.postMessage({ url, method: 'POST', body: JSON.stringify({ items: [] }) }); else fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [] }) }) .then(r => r.json()).then(d => this._onSuccess()).catch(e => this._showError(e.message)); } _onSuccess(data) { fetch(`${window.Theme.routes.cart_url}.js`).then(r => r.json()).then(d => { const evt = new CustomEvent('cartcount:update', { detail: d }); window.dispatchEvent(evt); }).catch(e => this._showError(e.message)); } _showError(msg) { console.log(msg); } unload() { if (this.worker) this.worker.terminate(); this.events.unregisterAll(); } } return Order; }; /* Weitere Module (Unverändert, aber mit Desktop-Anpassungen) */ modules['product-compare-flyout'] = function() { /* Wie zuvor */ }; modules['back-to-top'] = function() { /* Wie zuvor */ }; /* Helper Functions */ function debounce(fn, wait) { /* Wie zuvor */ } function throttle(fn, limit) { /* Wie zuvor */ } function isInViewport(el) { /* Wie zuvor */ } /* Main Initialization */ function initEmpire() { require(970); // Revealer require(186); // Trend const sections = new Map(); sections.set('shoppable-image', el => new (require('shoppable').default)({ el, id: el.dataset.sectionId })); sections.set('grouped-content', el => new (require(263).default)(el, { intelliparse: true })); sections.set('dynamic-testimonials', el => new (require('dynamic-testimonials').default)({ el, id: el.dataset.sectionId })); sections.set('order', () => new (require('order').default)()); sections.set('product-compare-flyout', el => new (require('product-compare-flyout').default)(el)); sections.set('back-to-top', el => new (require('back-to-top').default)(el)); document.querySelectorAll('[data-section-type]').forEach(el => { const type = el.dataset.sectionType; if (sections.has(type)) { if (require(646).breakpoints.current.min('L') && ['product-compare-flyout', 'back-to-top'].includes(type) && !isInViewport(el)) { const observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { sections.get(type)(el); observer.unobserve(el); } }, { rootMargin: '100px' }); observer.observe(el); } else { sections.get(type)(el); } } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initEmpire); } else { initEmpire(); } return modules; })(); /******/ var __webpack_module_cache__ = {}; /******/ function __webpack_require__(moduleId) { /* Wie zuvor */ } /******/ var __webpack_exports__ = __webpack_require__(263); /******/ })();

Unsere Leitern

Entdecken Sie bei Gerüstexpress Leitern in Top-Qualität für sicheres und effizientes Arbeiten auf Baustellen. Unsere robusten Modelle bieten höchste Stabilität und Langlebigkeit – perfekt für Profis und Heimwerker. Nutzen Sie den Filter links, um schnell die passende Leiter zu finden, und bestellen Sie auf www.geruestexpress.de mit schneller Lieferung!

Es gibt keine Produkte, die Ihren Suchkriterien entsprechen

Alle Produkte anzeigen

Entdecken Sie unsere Angebote

Alle Anzeigen

Produkte vergleichen

{"one"=>"Wählen Sie 2 oder 3 Artikel zum Vergleichen aus", "other"=>"{{ count }} von 3 Elementen ausgewählt"}

Wählen Sie das erste zu vergleichende Element aus

Wählen Sie das zweite zu vergleichende Element aus

Wählen Sie das dritte Element zum Vergleichen aus

Vergleichen