Menu
EUR
Roterende punten breed
€16,95 €14,01
Toevoegen aan winkelwagen
Roterende punten breed

Roterende punten breed

€16,95 €14,01 Incl. btw Excl. btw

De roterende punten wordt meestal bovenop het hekwerk bevestigd ter beveiliging. Dit buisdeel met acht aangelaste punten is 230 millimeter breed en wordt over de bovenste buis van het hek heen geschoven. B:230 mm, Diameter 48 mm, Kleur Thermisch verzinkt Lees meer.

2 à 3 dagen
  • Gratis verzending vanaf €700,-
  • Altijd 5 jaar garantie
  • Levering met eigen bezorgservice
  • Achteraf betalen mogelijk
Ergens anders goedkoper gezien?

Productomschrijving

Roterende punten breed

De roterende punten wordt meestal bovenop het hekwerk bevestigd ter beveiliging. Dit buisdeel met acht aangelaste punten wordt over de bovenbuis (ø 42 mm) van het hekwerk heen geschoven.

Product specificaties:

  • Geschikt voor bovenbuis ø42 mm
  • Kleur: verzinkt
  • Breedte: 230 mm
  • Lengte: 90 mm
Vragen over dit product of hulp nodig bij je bestelling?
Neem contact op met onze klantenservice via [email protected] of bel +31 40 209 4087.
Wij zijn bereikbaar tussen 08:00 tot 16:00u.

Gerelateerde producten

Vragen over dit product of hulp nodig bij je bestelling?
Neem contact op met onze klantenservice via [email protected] of bel +31 40 209 4087.
Wij zijn bereikbaar tussen 08:00 tot 16:00u.

Recent bekeken

Roterende punten breed
Roterende punten breed
€16,95 €14,01

Specificaties

0/5
0 sterren op basis van 0 beoordelingen
0 beoordelingen
Kies uw taal
Kies uw valuta

Recent toegevoegd

Totaal incl. btw
€0,00
Bestel nog voor €700,00 en de verzending is gratis
0
Vergelijk

Beoordeel Roterende punten breed

Dit artikel is toegevoegd aan uw winkel wagen!
(function () { const API_BASE = "https://hd-spijlen.michel-abchekwerk.workers.dev"; const TARGET_SLUG = "/spijlendirect-compleet-pakket"; // Alleen op deze pagina (robust: met/zonder .html, met trailing slash) if (!location.pathname.includes(TARGET_SLUG)) return; console.log("[HD] init", location.pathname); // --------- kleine CSS fix tegen layout shift ---------- (function injectCss() { const css = ` /* Zorg dat ons blok geen grid/float in de war brengt */ #hd-configurator { display:block; width:100%; clear:both; } #hd-configurator .hd-wrap { width:100%; } #hd-configurator .hd-wrap * { box-sizing:border-box; } `; const s = document.createElement("style"); s.textContent = css; document.head.appendChild(s); })(); function ready(fn) { if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", fn); else fn(); } // --------- Helpers ---------- const fmtEUR = (n) => { try { return new Intl.NumberFormat("nl-NL", { style: "currency", currency: "EUR" }).format(n); } catch { return "€ " + (Math.round(n * 100) / 100).toFixed(2).replace(".", ","); } }; function getVatPref() { try { const v = localStorage.getItem("vat_type_pref") || ""; if (/excl/i.test(v)) return "excl"; if (/incl/i.test(v)) return "incl"; } catch {} const c = document.cookie || ""; if (/vat_type_pref=excl/i.test(c)) return "excl"; if (/vat_type_pref=incl/i.test(c)) return "incl"; return "incl"; } function roundingNote(m) { if (!isFinite(m) || m <= 0) return ""; const vakken = Math.ceil(m / 2.2); const eff = vakken * 2.2; return `Wordt afgerond naar ${vakken} vak(ken) = ${eff.toFixed(1).replace(".", ",")}m`; } // --------- Koopblok vinden & verbergen ---------- function findAddToCartSpan() { // 1) Specifiek op class (jij gaf die door) const candidates = Array.from( document.querySelectorAll("span.flex-grow-1.align-self-center.px-3") ); // 2) Tekst check (niet strict gelijk — includes is veiliger) const hit = candidates.find((s) => (s.textContent || "").trim().toLowerCase().includes("toevoegen aan winkelwagen") ); if (hit) return hit; // fallback: zoek op tekst in alle spans const any = Array.from(document.querySelectorAll("span")).find((s) => (s.textContent || "").trim().toLowerCase().includes("toevoegen aan winkelwagen") ); return any || null; } function findPurchaseContainerFromButton(btn) { // We zoeken de “kleinste” ancestor die: // - een select heeft (variant) // - een qty input/spinner heeft OF een hoeveelheid veld // - de add-to-cart button bevat let el = btn; for (let i = 0; i < 10 && el; i++) { const hasSelect = !!el.querySelector("select"); const hasQty = !!el.querySelector('input[type="number"]') || !!el.querySelector(".qty, .quantity, .quantity-selector, .input-group"); const hasBtn = !!el.querySelector("button, input[type=submit]"); if (hasSelect && hasBtn && hasQty) return el; el = el.parentElement; } // fallback: verberg gewoon het form of parent return btn.closest("form") || btn.parentElement; } function hideBuyBox() { // sticky koopknop (als aanwezig) const sticky = document.querySelector("#addtocart-sticky, .addtocart-sticky, .add-to-cart-sticky"); if (sticky) sticky.style.display = "none"; const span = findAddToCartSpan(); if (!span) return; const btn = span.closest("button") || span.closest('[role="button"]'); if (!btn) return; const container = findPurchaseContainerFromButton(btn); if (container) { container.style.display = "none"; container.setAttribute("data-hd-hidden", "1"); } // Ook de “Maak een keuze” label-block wegdrukken als die elders staat const labels = Array.from(document.querySelectorAll("label, .label")); const choiceLabel = labels.find((l) => (l.textContent || "").toLowerCase().includes("maak een keuze")); if (choiceLabel) { const block = choiceLabel.closest(".form-group, .product-options, .product__options, .row, .field") || choiceLabel.parentElement; if (block) block.style.display = "none"; } } // Houd het weg als Lightspeed her-rendered const mo = new MutationObserver(() => hideBuyBox()); mo.observe(document.documentElement, { childList: true, subtree: true }); // --------- Main ---------- ready(async () => { // 1) koopblok alvast wegdrukken (kan later opnieuw verschijnen) hideBuyBox(); // 2) mount const mount = document.getElementById("hd-configurator"); if (!mount) { console.warn("[HD] #hd-configurator niet gevonden. Zet
in productomschrijving."); return; } // Defaults (later uitbreidbaar met extra velden) const DEFAULTS = { soortSpijlen: "Spijlen 25x25 vlak", hoeken: "0", muuraansluiting: "Geen", soortPalen: "Grondpalen", soortPaaldop: "Paalkap kunststof", }; // 3) opties ophalen let opt; try { opt = await fetch(API_BASE + "/api/options").then((r) => r.json()); } catch (e) { opt = { ok: false, error: String(e) }; } if (!opt.ok) { mount.innerHTML = `
Configurator error
${opt.error || "Opties konden niet geladen worden."}
`; return; } const kleuren = (opt.options.kleuren || []).filter((k) => /7016|9005/.test(k)); const hoogtes = opt.options.hoogtes || []; // 4) UI renderen (neutraal, breekt layout niet) mount.innerHTML = `

Configureer je spijlenpakket

Kleur
Hoogte
Totale lengte (meter)
`; const elKleur = mount.querySelector("#hd-kleur"); const elHoogte = mount.querySelector("#hd-hoogte"); const elLengte = mount.querySelector("#hd-lengte"); const elRound = mount.querySelector("#hd-round"); const elBtn = mount.querySelector("#hd-calc"); const elPrice = mount.querySelector("#hd-price"); kleuren.forEach((k) => elKleur.add(new Option(k, k))); hoogtes.forEach((h) => elHoogte.add(new Option(h, h))); const updateRound = () => { elRound.textContent = roundingNote(Number(elLengte.value || 0)); }; elLengte.addEventListener("input", updateRound); updateRound(); async function quote() { elBtn.disabled = true; elBtn.style.opacity = "0.7"; const cfg = { ...DEFAULTS, kleur: elKleur.value, hoogte: elHoogte.value, lengthM: Number(elLengte.value || 0), }; let res; try { res = await fetch(API_BASE + "/api/quote", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ config: cfg }), }).then((r) => r.json()); } catch (e) { res = { ok: false, error: String(e) }; } elBtn.disabled = false; elBtn.style.opacity = "1"; if (!res.ok) { elPrice.innerHTML = `
Prijs ophalen mislukt: ${res.error || "onbekend"}
`; return; } const pref = getVatPref(); const main = pref === "excl" ? res.totalExcl : res.totalIncl; elPrice.innerHTML = `
${fmtEUR(main)}
Incl. ${fmtEUR(res.totalIncl)} · Excl. ${fmtEUR(res.totalExcl)} · ${res.lengthLabel}
`; // koopblok nogmaals wegdrukken (LS kan terugzetten) hideBuyBox(); } elBtn.addEventListener("click", quote); quote(); // en nogmaals verbergen na init hideBuyBox(); }); })();