4,8+ „Hervorragend“ auf Trusted Shops Schneller Versand 7-tägiger Kundenservice Kostenlose Großkundenbetreuung
FENSTER-HAMMER
Merkliste
Dein Konto
Vorteile:
  • Gespeicherte Adressdaten
  • Einfacher Service
  • Bestellstatus & Versand Übersicht
  • Bleibende Merkliste
0 0,00 € 0,00 €
  • Schlösser
    Einsteckschlösser Elektrische Türöffner FH-Schlösser Schließbleche Schiebtürschlösser Vorhängeschlösser WC-Tür-Schlösser
    Garagentorschlösser
    mit Riegel nach oben mit Riegel nach unten mit seitlich ausfahrenden Riegeln oben und unten schließend Zubehör für Gargentorschlösser
    Haustürschlösser Kastenschlösser
    Kästen Korridortürschlösser Profilzylinder Riegelschlösser Rohrrahmenschlösser Wohnungstürschlösser Zimmertürschlösser Zubehör für Schloss und Tor
    Schlösser Kategorie Vorschau Mehr Sicherheit für dein Zuhause – mit zuverlässigen Schlössern für Türen, Tore und mehr.

    Alle Schlösser sehen
  • Beschläge
    Rosetten
    Griffe & Türdrücker
    Türdrücker Türgarnituren Türknäufe
    Schilder
    Beschläge Kategorie Vorschau Verleihe Türen und Fenstern neuen Charakter – mit Griffen, Rosetten und Beschlägen für Funktion und Stil.

    Alle Beschläge sehen
  • Fenster & Sicherheit
    Fensterbankschrauben Fenstergriffe Fensterleisten
    Fenstermontageschrauben Fenstersicherungen Keile
    Kompriband / Fugendichtband Vorhängeschlösser
    Fenster & Sicherheit Kategorie Vorschau Mehr Schutz für dein Zuhause – mit cleveren Fenster- und Sicherheitslösungen zum Nachrüsten.

    Alle Fenster & Sicherheit sehen
  • Gartenbau
    Holzschutzband Terrassen-Unterkonstruktion
    Sichtschutz
    Fleece PP (Polypropylen) PVC (Polyvinylchlorid)
    Terrassenschrauben
    A2 Edelstahlschrauben A4 Edelstahlschrauben C1 Edelstahlschrauben
    Gartenbau Kategorie Vorschau Baue dir deinen Lieblingsplatz draußen – mit Terrassenschrauben und Zubehör für stabile Ergebnisse.

    Alle Gartenbau sehen
  • Bauchemie
    Kleben & Dichten
    Schaum
    Zubehör Chemische Befestigung
    Bauchemie Kategorie Vorschau Fester Halt für anspruchsvolle Montagen – mit Mörtel, Dichtungen und Bauchemie.

    Alle Bauchemie sehen
  • Zubehör
    Arbeitshandschuhe Betriebsmittel Bits Klebebänder
    Bohrer
    Holzbohrer Metallbohrer SDS-Plus Hammerbohrer
    Dampfbremsen Malerzubehör Schleifen-Trennen Werkzeug
    Zubehör Kategorie Vorschau Die richtigen Helfer für jedes Projekt – Bits, Bohrer und Werkzeuge für saubere Arbeit.

    Alle Zubehör sehen
  • Marken
    ABUS BEVER INDEX Pica SCREWREBEL WERA
    Marken Highlights
    • ABUS Vorhängeschlösser
    • BEVER Einsteckschlösser
    • SCREWREBEL Schrauben
    • Wera Werkzeug

    Alle Marken sehen
  • Aktionen
    Aktuelle Aktionen

    Alle Aktionen sehen
Schlösser

Passende Lösungen für Haustüren, Wohnungstüren, Zimmer und Tore: Entdecke robuste Schlösser, elektrische Türöffner sowie Profilzylinder inklusive Zubehör für maximale Sicherheit.

  • Alle Schlösser
  • Einsteckschlösser
  • Elektrische Türöffner
  • FH-Schlösser
  • Haustürschlösser
  • Kästen
  • Kastenschlösser
  • Korridortürschlösser
  • Profilzylinder
  • Riegelschlösser
  • Rohrrahmenschlösser
  • Schiebtürschlösser
  • Schließbleche
  • Vorhängeschlösser
  • WC-Tür-Schlösser
  • Wohnungstürschlösser
  • Zimmertürschlösser
  • Zubehör für Schloss und Tor
Fenster & Sicherheit
  • Alle Fenster & Sicherheit
  • Fensterbankschrauben
  • Fenstergriffe
  • Fensterleisten
  • Fenstermontageschrauben
  • Fenstersicherungen
  • Keile
  • Kompriband / Fugendichtband
  • Vorhängeschlösser
Beschläge
  • Alle Beschläge
  • Rosetten
  • Schilder
Gartenbau
  • Alle Gartenbau-Produkte
  • Holzschutzband
  • Terrassen-Unterkonstruktion
Bauchemie
  • Alle Bauchemie
  • Kleben & Dichten
  • Schaum
  • Zubehör Chemische Befestigung
Zubehör
  • Alle Zubehör-Produkte
  • Arbeitshandschuhe
  • Betriebsmittel
  • Bits
  • Dampfbremsen
  • Klebebänder
  • Malerzubehör
  • Schleifen-Trennen
  • Werkzeug
Bohrer
  • Alle Bohrer
  • Holzbohrer
  • Metallbohrer
  • SDS-Plus Hammerbohrer
Marken
  • Alle Marken
  • ABUS
  • BEVER
  • EFF EFF
  • INDEX
  • INTRA-TEC
  • Pica
  • SCREWREBEL
  • WERA
Aktionen
  • Alle Aktionen
  • Aktuelle Aktionen
Griffe & Türdrücker
  • Alle Griffe & Türdrücker
  • Türdrücker
  • Türgarnituren
  • Türknäufe
Sichtschutz
  • Alle Sichtschutz-Produkte
  • Fleece
  • PP (Polypropylen)
  • PVC (Polyvinylchlorid)
Terrassenschrauben
  • Alle Terrassenschrauben
  • A2 Edelstahlschrauben
  • A4 Edelstahlschrauben
  • C1 Edelstahlschrauben
Garagentorschlösser
  • Alle Garagentorschlösser
  • mit Riegel nach oben
  • mit Riegel nach unten
  • mit seitlich ausfahrenden Riegeln
  • oben und unten schließend
  • Zubehör für Gargentorschlösser

Deine Hammer-Kategorien

  • Schlösser Kategorie Vorschau Schlösser Mehr Sicherheit für dein Zuhause – mit zuverlässigen Schlössern für Türen, Tore und mehr.
  • Beschläge Kategorie Vorschau Beschläge Verleihe Türen und Fenstern neuen Charakter – mit Griffen, Rosetten und Beschlägen für Funktion und Stil.
  • Fenster & Sicherheit Kategorie Vorschau Fenster & Sicherheit Mehr Schutz für dein Zuhause – mit cleveren Fenster- und Sicherheitslösungen zum Nachrüsten.
  • Garten Kategorie Vorschau Terrasse Baue dir deinen Lieblingsplatz draußen – mit Terrassenschrauben und Zubehör für stabile Ergebnisse.
  • Bauchemie Kategorie Vorschau Bauchemie Fester Halt für anspruchsvolle Montagen – mit Mörtel, Dichtungen und Bauchemie.
  • Zubehör Kategorie Vorschau Zubehör Die richtigen Helfer für jedes Projekt – Bits, Bohrer und Werkzeuge für saubere Arbeit.

Wir verwenden Cookies und ähnliche Technologien auf unserer Website und verarbeiten personenbezogene Daten von Besucher:innen unserer Webseite (z.B. IP-Adresse), um z.B. Inhalte und Anzeigen zu personalisieren, Medien von Drittanbietern einzubinden oder Zugriffe auf unsere Website zu analysieren. Die Datenverarbeitung erfolgt erst durch gesetzte Cookies. Wir teilen diese Daten mit Dritten, die wir in den Einstellungen benennen.
Die Datenverarbeitung kann mit Einwilligung oder aufgrund eines berechtigten Interesses erfolgen. Die Zustimmung kann erteilt oder abgelehnt werden. Es besteht das Recht, nicht einzuwilligen und die Einwilligung zu einem späteren Zeitpunkt zu ändern oder zu widerrufen. Beachte unser Impressum und weitere Hinweise zur Verwendung personenbezogener Daten in unserer Daten­schutz­erklärung.

Weitere Einstellungen
Infos Infos
  • Kontakt
  • Versand
  • Zahlungsarten
  • Verpackung und Umwelt
  • Rücksendungen
  • Über uns
Community Community
  • Instagram
  • Facebook
  • TikTok
  • YouTube
  • Pinterest
Rechtliches Rechtliches
  • Impressum
  • Allgemeine Geschäftsbedingungen
  • Datenschutzerklärung
  • Cookie Einstellungen
  • Barrierefreiheitserklärung
  • Widerrufsbelehrung
  • Bestellung widerrufen
Vorteile Vorteile
  • Immer schneller Versand, Standard 1-3 Tage, Express 1 Tag
  • Kostenfreier Versand nach Deutschland ab 150€
  • Schnelle Servicerückmeldung auch am Wochenende
  • 14-tägiges Rückgaberecht ohne Angabe von Grund
  • Großkundenbetreuung mit direktem Ansprechpartner
  • Über 1,5 Millionen erfolgreiche Käufe
Schraubenhammer Fensterhammer

Onlineshops der INTRA-TEC GmbH LinkedIn

Stegerwaldstraße 1b & 1d, 51427 Bergisch Gladbach

Öffnungs- & Abholzeiten: Mo-Do 08:00–13:00 & 13:30–16:00 Uhr, Fr 08:00–13:00 & 13:30–14:45 Uhr

Telefonischer Kundenservice: Mo-Do 09:30–13:00 & 13:30–16:00 Uhr, Fr 09:30–13:00 & 13:30–14:45 Uhr

Telefon: 02204 910 980

Zusätzlicher Service: E-Mail-Support an 7 Tagen pro Woche mit Antwortzeit unter 24 Stunden

E-Mail: service@fenster-hammer.de

Unsere Zahlungsarten
Apple Pay
PayPal
Klarna
Google Pay
American Express
Mastercard
Visa
Billie Rechnungskauf für Firmen
Vorkasse
Unsere Versandarten
Standardversand Standardversand
Expressversand Expressversand
Selbstabholung Selbstabholung
© 2014–2026 FENSTER-HAMMER | INTRA-TEC GmbH. Alle Rechte vorbehalten.
10 Jahre Onlineshop Sicher shoppen mit SSL-Verschlüsselung Deutsches Unternehmen
(function () { var _tsid = 'XDCA531410FCCAB88C0D491294FA17294'; _tsConfig = { 'yOffset': '-30', /* offset from page bottom */ 'variant': 'reviews', /* default, reviews, custom, custom_reviews */ 'customElementId': '', /* required for variants custom and custom_reviews */ 'trustcardDirection': '', /* for custom variants: topRight, topLeft, bottomRight, bottomLeft */ 'disableResponsive': 'false', /* deactivate responsive behaviour */ 'disableTrustbadge': 'false', /* deactivate trustbadge */ 'data-mobile-position': 'right' }; var _ts = document.createElement('script'); _ts.type = 'text/javascript'; _ts.charset = 'utf-8'; _ts.async = true; _ts.src = '//widgets.trustedshops.com/js/' + _tsid + '.js'; var __ts = document.getElementsByTagName('script')[ 0]; __ts.parentNode.insertBefore(_ts, __ts); }) ();

Anmelden

Versandkosten

Versandinfos

Lieferzeiten, Kosten & Abholinfos im Überblick

Hammer Versandversprechen

Bestellst Du lagernde Artikel vor dem Versandschluss Deiner Versandart, übergeben wir Dein Paket noch am selben Werktag an den Versanddienstleister. Unser erfahrenes Team und die moderne Technik in unserem Lager sorgen dafür, dass Deine Bestellung immer zuverlässig so schnell wie möglich unser Lager verlässt.

Auch nach dem Versand sind wir für Dich da. Wenn Du Fragen hast, Dir Sorgen um Dein Paket machst oder etwas nicht wie geplant läuft, setzt unser Kundenservice alles daran, Dich bestmöglich zu unterstützen und eine Lösung zu finden. Auf die Laufzeit und mögliche Verzögerungen beim Versanddienstleister haben wir keinen vollständigen Einfluss; einen bestimmten Zustelltag können wir daher nicht garantieren.

Versand innerhalb Deutschlands

Der Versandschluss ist die letzte Bestellzeit für Versand oder Abholbereitstellung am selben Werktag. Die Lieferzeit ist ein Richtwert, sofern sie nicht ausdrücklich garantiert wird.

Versandart · PreisVersandschlussLieferzeitZustellungstageWeitere Informationen
DHL StandardDeutschland · 6,95 € · ab 150 € versandkostenfrei 13:00 Uhr (Mo–Fr) Voraussichtlich 1-3 Zustellungstage
MoDiMiDoFrSa
So

Bestellst Du Montag bis Freitag vor 13:00 Uhr, verlässt Dein Paket noch am selben Tag unser Lager. Nach Versandschluss erfolgt der Versand am nächsten Werktag. DHL stellt von Montag bis Samstag zu; die Laufzeit von 1–3 Zustellungstagen ist ein Richtwert und keine rechtsverbindliche Garantie. Nach dem Versand erhältst Du eine E-Mail mit Deinem Sendungsverfolgungslink.

In derselben Woche

Dienstag, 10:00 Uhr: Bestellung vor Versandschluss, Versand am Dienstag. Die voraussichtliche Zustellung erfolgt zwischen Mittwoch und Freitag.

Über den Wochenwechsel

Freitag, 14:00 Uhr: Bestellung nach Versandschluss, Versand am Montag. Die voraussichtliche Zustellung erfolgt zwischen Dienstag und Donnerstag.

GO! ExpressDeutschland ohne Inseln · ab 20 € 13:00 Uhr (Mo–Fr) Garantiert am nächsten Zustellungstag
MoDiMiDoFr
SaSo

GO! Express liefert innerhalb Deutschlands, Inseln sind ausgenommen. Bestellst Du bis 13:00 Uhr, wird Dein Paket noch am selben Werktag versandt und am nächsten möglichen Zustellungstag zugestellt. GO! stellt ausschließlich Montag bis Freitag zu. Der Preis richtet sich nach dem Paketgewicht; den genauen Betrag siehst Du im Checkout.

In derselben Woche

Donnerstag, 13:00 Uhr: Versand am Donnerstag; die garantierte Zustellung erfolgt am Freitag.

Über den Wochenwechsel

Freitag, 14:00 Uhr: Versandschluss verpasst, Versand am Montag; die garantierte Zustellung erfolgt am Dienstag.

20,00 €für Pakete bis 1 kg
+1,20 €je weiteres Kilo
Selbstabholung: AbholboxKostenlos · rund um die Uhr Mo–Do 15:00 · Fr 14:30 Uhr In der Regel nach 30 Minuten
MoDiMiDoFrSaSo

Die Abholbox eignet sich für 97 % unserer Produkte. Wenn Du im Checkout „EC Karte“ gewählt hast und noch nicht bezahlt hast, musst Du Deine Bestellung im Büro abholen und dort zuerst bezahlen. Während unserer Öffnungszeiten ist Deine Bestellung in der Abholbox in der Regel 30 Minuten nach Bestellung bereit. Nach Versandschluss bearbeiten wir sie am nächsten Werktag. Zugangscode und Boxnummer erhältst Du per E-Mail; sobald Du beides hast, ist die Box 24 Stunden täglich, 365 Tage im Jahr zugänglich. Größere Bestellungen können auf mehrere Boxen verteilt werden.

In derselben Woche

Dienstag, 10:00 Uhr: Bestellung vor Versandschluss; die Box ist in der Regel ab 10:30 Uhr bereit und danach jederzeit zugänglich.

Über den Wochenwechsel

Freitag, 15:00 Uhr: Bestellung nach Versandschluss, Bearbeitung am Montag. Die Box ist danach in der Regel nach 30 Minuten bereit.

Selbstabholung: BüroKostenlos · größere Artikel & Zahlung vor Ort Mo–Do 15:00 · Fr 14:30 Uhr In der Regel nach 30 Minuten
MoDiMiDoFr
SaSo

Diese Abholung ist für Artikel vorgesehen, die nicht in die Abholbox passen. Auch noch unbezahlte Bestellungen mit der im Checkout gewählten Zahlungsart „EC Karte“ musst Du immer im Büro abholen. Du bezahlst zuerst per EC-Karte und erhältst danach Deine Ware. Während unserer Öffnungszeiten ist Deine Bestellung in der Regel 30 Minuten nach Bestellung bereit. Nach Versandschluss bearbeiten wir sie am nächsten Werktag; die Abholung erfolgt dann während der Bürozeiten.

In derselben Woche

Dienstag, 10:00 Uhr: Bestellung vor Versandschluss; die Ware ist in der Regel ab 10:30 Uhr zur Abholung im Büro bereit.

Über den Wochenwechsel

Freitag, 14:31 Uhr: Bestellung nach Versandschluss, Bearbeitung am Montag. Danach ist die Ware in der Regel nach 30 Minuten während der Bürozeiten abholbereit.

Die Zeiten gelten für lagernde Artikel. Die Abholbereitstellung erfolgt während unserer Öffnungszeiten; nach Versandschluss bearbeiten wir Deine Bestellung am nächsten Werktag. Feiertage und andere äußere Einflüsse können sie verlängern.

Versand außerhalb Deutschlands

DHL versendet nach Österreich, Belgien, Frankreich, Luxemburg, in die Niederlande und nach Polen. Wähle ein Zielland auf der Karte oder im Menü, um Lieferzeit und Zustelltage zu sehen.

DHLDHL Paket International15,00 € pro Paket bis 30 kg
Versandweg von Deutschland in die Niederlande Fokussierter Kartenausschnitt von Mitteleuropa mit Deutschland, den sechs Zielländern und angrenzenden Ländern. Die umliegenden Länder bilden den dezenten Kartenkontext. Eine Linie zeigt den Versandweg zum ausgewählten Zielland. Deutschland Niederlande Belgien Luxemburg Frankreich Österreich Polen 📦
Deutschland Lieferländer Nicht-Lieferländer Paketweg

Zielland auswählen

Versandschluss13:00 Uhr (Mo–Fr)
LieferzeitVoraussichtlich 2–4 Werktage
Zustellungstage
MoDiMiDoFr
SaSo

DHL-Laufzeiten von Januar bis August 2026 sind Richtwerte, keine Garantie. Hellgrün kennzeichnet mögliche Samstagszustellung je nach Sendung und Zielgebiet; Feiertage können die Laufzeit verlängern.

Selbstabholung

Du möchtest Deine Bestellung selbst abholen? Wähle dafür im Checkout die kostenlose Selbstabholung – je nach Deinen Artikeln und Deiner Zahlungsart wird Dir automatisch die passende der beiden Abholmöglichkeiten zugeordnet. Standardmäßig liegt Deine Bestellung in unserer Abholbox für Dich bereit, damit Du sie flexibel rund um die Uhr abholen kannst. Nur wenn Deine Artikel nicht in die Box passen oder Du noch vor Ort per EC-Karte bezahlen musst, holst Du Deine Bestellung während der Öffnungszeiten im Büro ab.

Geöffnete Abholbox mit einem Paket, das eine Person entnimmt.

Flexibel abholen

Abholbox

24/7 · 365 Tage

Für bereits bezahlte Bestellungen und den Großteil unseres Sortiments.

Versandschluss
Mo–Do 15:00 · Fr 14:30 Uhr
Bereitstellung
In der Regel nach 30 Minuten
Abholung
24/7 Zugang

Die Abholbox eignet sich für 97 % unserer Produkte. Zugangscode und Boxnummer erhältst Du per E-Mail. Nach Versandschluss bearbeiten wir Deine Bestellung am nächsten Werktag. Größere Bestellungen können auf mehrere Boxen verteilt werden.

Auf Karte ansehen
Apple KartenOpenStreetMapGoogle Maps
Klingel neben dem Schild „Büro Selbstabholer“ am Eingang für die Büroabholung.

Während Öffnungszeiten

Abholung im Büro

Mo–Fr · Bürozeiten

Für größere Artikel und für noch unbezahlte Bestellungen mit „EC Karte“.

Versandschluss
Mo–Do 15:00 · Fr 14:30 Uhr
Bereitstellung
In der Regel nach 30 Minuten
Abholung
Mo–Do08:00–13:00 · 13:30–16:00 Uhr
Fr08:00–13:00 · 13:30–14:45 Uhr

Nach Versandschluss bearbeiten wir Deine Bestellung am nächsten Werktag. Bitte bring Deine Bestellbestätigung mit. EC-Kartenzahlung ist möglich; Bargeld nehmen wir nicht an.

Auf Karte ansehen
Apple KartenOpenStreetMapGoogle Maps
Wichtige Info: Lagerzeit, Erinnerung & automatische StornierungIst Deine Bestellung 7 Tage nach Bereitstellung noch nicht abgeholt, erinnern wir Dich per E-Mail oder Telefon. Erhalten wir auch bis 14 Tage nach Bereitstellung keine Rückmeldung von Dir, stornieren wir Deinen Auftrag und erstatten bereits geleistete Zahlungen vollständig.
(function () { var root = document.querySelector(".shop-page-v2"); if (!root || document.getElementById("shop-pages-v2-css")) return; var href = root.getAttribute("data-v2-css-url"); if (!href) { var shop = root.getAttribute("data-shop"); var hostname = window.location.hostname.toLowerCase(); var isFhHost = hostname === "fenster-hammer.de" || hostname.slice(-18) === ".fenster-hammer.de"; if (shop !== "fh" && shop !== "sh") shop = isFhHost ? "fh" : "sh"; var imageHost = shop === "fh" ? "bilder.fenster-hammer.de" : "bilder.schrauben-hammer.de"; href = "https://" + imageHost + "/frontend/Content-Seiten/shop-pages-v2-20261006-74d847d2.min.css"; } var stylesheet = document.createElement("link"); stylesheet.id = "shop-pages-v2-css"; stylesheet.rel = "stylesheet"; stylesheet.href = href; document.head.appendChild(stylesheet); }()); (function () { document.querySelectorAll('.shipping-widget').forEach(function (widgetRoot, instanceIndex) { if (widgetRoot.dataset.initialized === 'true') return; widgetRoot.dataset.initialized = 'true'; const detailAnimations = new WeakMap(); function animateDetails(panel, expanded) { if (!panel || (!expanded && panel.hidden)) return; const content = panel.querySelector(".delivery-table__detail-content"); if (!content) { panel.hidden = !expanded; return; } const previousAnimation = detailAnimations.get(panel); let start; if (previousAnimation) { const currentStyle = window.getComputedStyle(content); start = { height: currentStyle.height, paddingTop: currentStyle.paddingTop, paddingBottom: currentStyle.paddingBottom, borderTopWidth: currentStyle.borderTopWidth, opacity: currentStyle.opacity, transform: currentStyle.transform }; previousAnimation.cancel(); detailAnimations.delete(panel); } else if (expanded && panel.hidden) { start = { height: "0px", paddingTop: "0px", paddingBottom: "0px", borderTopWidth: "0px", opacity: 0, transform: "translateY(-4px)" }; } else { const currentStyle = window.getComputedStyle(content); start = { height: currentStyle.height, paddingTop: currentStyle.paddingTop, paddingBottom: currentStyle.paddingBottom, borderTopWidth: currentStyle.borderTopWidth, opacity: currentStyle.opacity, transform: currentStyle.transform }; } panel.hidden = false; if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) { panel.hidden = !expanded; return; } const fullStyle = window.getComputedStyle(content); const end = expanded ? { height: fullStyle.height, paddingTop: fullStyle.paddingTop, paddingBottom: fullStyle.paddingBottom, borderTopWidth: fullStyle.borderTopWidth, opacity: 1, transform: "translateY(0)" } : { height: "0px", paddingTop: "0px", paddingBottom: "0px", borderTopWidth: "0px", opacity: 0, transform: "translateY(-4px)" }; const animation = content.animate([start, end], { duration: 180, easing: "cubic-bezier(0.22, 0.61, 0.36, 1)", fill: "both" }); detailAnimations.set(panel, animation); animation.finished.then(function () { if (detailAnimations.get(panel) !== animation) return; detailAnimations.delete(panel); if (!expanded) panel.hidden = true; animation.cancel(); }).catch(function () {}); } const countryButtons = Array.from(widgetRoot.querySelectorAll(".international-country-option")); const countryPaths = Array.from(widgetRoot.querySelectorAll(".map-country--target")); const countryLabels = Array.from(widgetRoot.querySelectorAll(".map-label[data-country-id]")); const route = widgetRoot.querySelector("#international-route"); const packageMarker = widgetRoot.querySelector("#international-route__package"); const destinationMarker = widgetRoot.querySelector("#international-route__destination"); const selectedFlag = widgetRoot.querySelector("#international-selected-flag"); const selectedName = widgetRoot.querySelector("#international-selected-name"); const countrySelect = widgetRoot.querySelector(".international-country-info"); const countrySelectTrigger = widgetRoot.querySelector("#international-country-select-trigger"); const countryMenu = widgetRoot.querySelector("#international-country-menu"); const average = widgetRoot.querySelector("#international-average"); const deliveryDays = widgetRoot.querySelector("#international-delivery-days"); const saturdayDay = widgetRoot.querySelector("#international-saturday-day"); const mapTitle = widgetRoot.querySelector("#international-map-title"); const origin = { lon: 7.15, lat: 50.98 }; const mapProject = function (lon, lat) { return { x: 10 + (lon + 8.5) * 18.2352941176, y: 10 + (56.5 - lat) * 26.25 }; }; let routeFrame = null; function setCountry(button) { const countryId = button.dataset.countryId; const destination = mapProject(Number(button.dataset.lon), Number(button.dataset.lat)); const countryLabel = countryLabels.find(function (label) { return label.dataset.countryId === countryId; }); const packageDestination = countryLabel ? { x: Number(countryLabel.getAttribute("x")), y: Number(countryLabel.getAttribute("y")) + 14 } : destination; const start = mapProject(origin.lon, origin.lat); const control = { x: (start.x + packageDestination.x) / 2, y: (start.y + packageDestination.y) / 2 - 16 }; const routeData = "M" + start.x.toFixed(1) + " " + start.y.toFixed(1) + " Q" + control.x.toFixed(1) + " " + control.y.toFixed(1) + " " + packageDestination.x.toFixed(1) + " " + packageDestination.y.toFixed(1); countryButtons.forEach(function (option) { const isSelected = option === button; option.setAttribute("aria-pressed", String(isSelected)); option.hidden = isSelected; }); countryPaths.forEach(function (path) { const isSelected = path.dataset.countryId === countryId; path.classList.toggle("is-selected", isSelected); path.setAttribute("aria-pressed", String(isSelected)); }); countryLabels.forEach(function (label) { label.classList.toggle("is-selected", label.dataset.countryId === countryId); }); selectedFlag.dataset.flagCountry = countryId; selectedName.textContent = button.dataset.countryName; countrySelectTrigger.setAttribute("aria-label", "Zielland auswählen, aktuell " + button.dataset.countryName); const averageDays = Number(button.dataset.average.replace(",", ".")); const estimate = averageDays >= 2.6 ? "2–4" : "2–3"; average.textContent = "Voraussichtlich " + estimate + " Werktage"; const saturdayPossible = button.dataset.saturday === "true"; saturdayDay.classList.toggle("delivery-day-strip__partial", saturdayPossible); saturdayDay.classList.toggle("delivery-day-strip__unavailable", !saturdayPossible); deliveryDays.setAttribute("aria-label", saturdayPossible ? "Montag bis Freitag; Samstagszustellung je nach Sendung und Zielgebiet möglich; Sonntag keine Zustellung" : "Montag bis Freitag; laut DHL-Länderübersicht keine Samstagszustellung ausgewiesen; Sonntag keine Zustellung"); mapTitle.textContent = "Versandweg von Deutschland nach " + button.dataset.countryName; route.setAttribute("d", routeData); destinationMarker.setAttribute("cx", packageDestination.x.toFixed(1)); destinationMarker.setAttribute("cy", packageDestination.y.toFixed(1)); if (routeFrame !== null) window.cancelAnimationFrame(routeFrame); route.style.strokeDasharray = "none"; route.style.strokeDashoffset = "0"; if (!route.getTotalLength || window.matchMedia("(prefers-reduced-motion: reduce)").matches) { packageMarker.setAttribute("transform", "translate(" + packageDestination.x.toFixed(1) + " " + packageDestination.y.toFixed(1) + ")"); return; } const routeLength = route.getTotalLength(); packageMarker.setAttribute("transform", "translate(" + start.x.toFixed(1) + " " + start.y.toFixed(1) + ")"); if (!routeLength) { packageMarker.setAttribute("transform", "translate(" + packageDestination.x.toFixed(1) + " " + packageDestination.y.toFixed(1) + ")"); return; } const duration = 620; const startedAt = performance.now(); function movePackage(now) { const progress = Math.min((now - startedAt) / duration, 1); const eased = 1 - Math.pow(1 - progress, 3); const point = route.getPointAtLength(routeLength * eased); packageMarker.setAttribute("transform", "translate(" + point.x.toFixed(1) + " " + point.y.toFixed(1) + ")"); if (progress < 1) routeFrame = window.requestAnimationFrame(movePackage); else routeFrame = null; } routeFrame = window.requestAnimationFrame(movePackage); } const initialCountry = countryButtons.find(function (button) { return button.getAttribute("aria-pressed") === "true"; }); function setCountryMenuOpen(isOpen, returnFocus) { if (!countrySelectTrigger || !countryMenu) return; countrySelectTrigger.setAttribute("aria-expanded", String(isOpen)); countryMenu.hidden = !isOpen; if (returnFocus) countrySelectTrigger.focus(); } function selectMapCountry(countryId) { const button = countryButtons.find(function (option) { return option.dataset.countryId === countryId; }); if (!button) return; setCountryMenuOpen(false); setCountry(button); } if (countrySelectTrigger) { countrySelectTrigger.addEventListener("click", function (event) { setCountryMenuOpen(countrySelectTrigger.getAttribute("aria-expanded") !== "true"); }); } if (countrySelect) { countrySelect.addEventListener("keydown", function (event) { if (event.key !== "Escape" || !countryMenu || countryMenu.hidden) return; event.preventDefault(); setCountryMenuOpen(false, true); }); } document.addEventListener("focusin", function (event) { if (countrySelect && !countrySelect.contains(event.target)) setCountryMenuOpen(false); }); document.addEventListener("click", function (event) { if (countrySelect && !countrySelect.contains(event.target)) setCountryMenuOpen(false); }); widgetRoot.querySelectorAll(".map-land .map-country:not(.map-country--target)").forEach(function (path) { path.setAttribute("aria-hidden", "true"); }); countryPaths.forEach(function (path) { const button = countryButtons.find(function (option) { return option.dataset.countryId === path.dataset.countryId; }); if (!button) return; path.setAttribute("role", "button"); path.setAttribute("tabindex", "0"); path.setAttribute("aria-label", button.dataset.countryName + " auswählen"); path.addEventListener("click", function (event) { selectMapCountry(path.dataset.countryId); }); path.addEventListener("keydown", function (event) { if (event.key !== "Enter" && event.key !== " ") return; event.preventDefault(); selectMapCountry(path.dataset.countryId); }); }); countryLabels.forEach(function (label) { if (!countryButtons.some(function (button) { return button.dataset.countryId === label.dataset.countryId; })) return; label.addEventListener("click", function (event) { selectMapCountry(label.dataset.countryId); }); }); countryButtons.forEach(function (button) { button.addEventListener("click", function (event) { setCountry(button); setCountryMenuOpen(false, true); }); }); if (initialCountry) setCountry(initialCountry); widgetRoot.querySelectorAll(".delivery-toggle").forEach(function (button) { button.addEventListener("click", function () { const expanded = button.getAttribute("aria-expanded") === "true"; const panel = widgetRoot.querySelector("#" + button.getAttribute("aria-controls")); if (!panel) return; if (!expanded) { widgetRoot.querySelectorAll('.delivery-toggle[aria-expanded="true"]').forEach(function (openButton) { const openPanel = widgetRoot.querySelector("#" + openButton.getAttribute("aria-controls")); openButton.setAttribute("aria-expanded", "false"); openButton.setAttribute("aria-label", openButton.dataset.labelCollapsed); animateDetails(openPanel, false); }); } button.setAttribute("aria-expanded", String(!expanded)); button.setAttribute("aria-label", expanded ? button.dataset.labelCollapsed : button.dataset.labelExpanded); animateDetails(panel, !expanded); }); }); // Native disclosure buttons retain keyboard semantics and work without JavaScript. const pickupMaps = Array.from(widgetRoot.querySelectorAll('.pickup-map')); pickupMaps.forEach(function (dropdown) { dropdown.addEventListener('toggle', function () { if (dropdown.open) pickupMaps.forEach(function (other) { if (other !== dropdown) other.open = false; }); }); dropdown.addEventListener('keydown', function (event) { if (event.key === 'Escape' && dropdown.open) { dropdown.open = false; dropdown.querySelector('summary').focus(); } }); }); document.addEventListener('click', function (event) { pickupMaps.forEach(function (dropdown) { if (!dropdown.contains(event.target)) dropdown.open = false; }); }); // Preserve main-page anchor IDs; namespace additional ShopBuilder instances. if (instanceIndex > 0) { const ids = new Map(); const prefix = 'shipping-' + Date.now().toString(36) + '-' + instanceIndex + '-'; widgetRoot.querySelectorAll('[id]').forEach(function (element) { const original = element.id; let unique = prefix + original; while (document.getElementById(unique)) unique += '-copy'; ids.set(original, unique); element.id = unique; }); widgetRoot.querySelectorAll('*').forEach(function (element) { ['aria-controls', 'aria-labelledby', 'aria-describedby', 'for'].forEach(function (attribute) { const value = element.getAttribute(attribute); if (value) element.setAttribute(attribute, value.split(/\s+/).map(function (id) { return ids.get(id) || id; }).join(' ')); }); ['href', 'xlink:href'].forEach(function (attribute) { const value = element.getAttribute(attribute); if (value && value.charAt(0) === '#' && ids.has(value.slice(1))) element.setAttribute(attribute, '#' + ids.get(value.slice(1))); }); ['fill', 'stroke', 'filter', 'clip-path', 'mask', 'style'].forEach(function (attribute) { const value = element.getAttribute(attribute); if (value && value.includes('url(#')) element.setAttribute(attribute, value.replace(/url\(#([^)]*)\)/g, function (match, id) { return ids.has(id) ? 'url(#' + ids.get(id) + ')' : match; })); }); }); } }); }());

Ihre gesetzlichen Gewährleistungsrechte