Specialist in gevels, vocht & daken
Voor doe-het-zelf & aannemers
Gratis verzending vanaf €500*
Offerte aanvragen
0
  • Incl.Excl.
    BTW
  • Specialist in gevels, vocht & daken
    Voor doe-het-zelf & aannemers
    Gratis verzending vanaf €500*
    Filters

    Tags

      Merken

      Producten getagd met Dakverf

      Filter
      4 producten
      Do it Pro Products ROOFCOAT NANO
      Do it Pro ProductsROOFCOAT NANO

      Kwalitatieve dakverf met nano technologie, in antraciet kleur voor poreuze ondergronden, oa. kunstleien, betonpannen...

      Deliverytime

      €209,00 Incl. BTW
      Do it Pro Products ROOFCOAT CT
      Do it Pro ProductsROOFCOAT CT

      Duurzame waterafstotende dakcoating voor poreuze dakbedekking zoals betonpannen.

      Deliverytime

      €459,00 Incl. BTW
      Do it Pro Products ROOFCOAT PLUS
      Do it Pro ProductsROOFCOAT PLUS

      Beschermende en decoratieve dakcoating op waterbasis die de levensduur van daken verlengt, bestand is tegen weersinvloeden en vervuiling, snel droogt en eenvoudig aan te brengen is dankzij de thixotrope samenstelling.

      Deliverytime

      €389,00 Incl. BTW
      Do it Pro Products ROOFCOAT CT Kleurenstaal
      Do it Pro ProductsROOFCOAT CT Kleurenstaal

      natte staal van de gewenste kleur roofcoat CT, keuze uit 7 kleuren

      Deliverytime

      €15,00 Incl. BTW

      Overige categorieën in Tags

      Recent bekeken

      Volteco PLASTIVO 180
      VoltecoPLASTIVO 180

      waterdichte flexibele coating voor kelders en bouwwerken die blootgesteld zijn met water, oa. waterputten, zwembaden, badkamers...

      Deliverytime

      €94,50 Incl. BTW
      /* Do it Pro – Universele Rekenhulp (simplified) */ /* 0) Token -> marker shim (zorgt dat [[calc-enable: …]] omgezet wordt naar een onzichtbare ) */ (function(){ function parsePairs(s){ const out = {}; (s||"").split(";").forEach(pair=>{ const p = pair.trim(); if(!p) return; const m = p.match(/^([a-z0-9_-]+)\s*=\s*"(.*)"$|^([a-z0-9_-]+)\s*=\s*([^"]+)$/i); if(!m) return; const k = (m[1]||m[3]||"").trim(); const v = (m[2]||m[4]||"").trim(); if(k) out[k] = v; }); return out; } function tokenToMarker(root){ try{ const walker = document.createTreeWalker(root||document.body, NodeFilter.SHOW_TEXT, null, false); const nodes = []; while (walker.nextNode()) { const t = walker.currentNode.nodeValue; if (t && /\[\[\s*calc-enable\s*:\s*.+\]\]/i.test(t)) nodes.push(walker.currentNode); } nodes.forEach(node=>{ const txt = node.nodeValue; const m = txt.match(/\[\[\s*calc-enable\s*:\s*(.+?)\s*\]\]/i); if (!m) return; const cfg = parsePairs(m[1]); const span = document.createElement("span"); span.className = "calc-enable"; span.style.display = "none"; Object.keys(cfg).forEach(k=>{ const camel = k.replace(/-([a-z])/g, (_,c)=>c.toUpperCase()); span.dataset[camel] = cfg[k]; }); node.parentNode.insertBefore(span, node); node.nodeValue = txt.replace(m[0], ""); // token weghalen uit zichtbare tekst }); }catch(e){} } function bootShim(){ tokenToMarker(document.body); const obs = new MutationObserver(()=>tokenToMarker(document.body)); obs.observe(document.body, {childList:true, subtree:true}); } if (document.readyState==='loading') document.addEventListener('DOMContentLoaded', bootShim); else bootShim(); })(); /* 1) Styles */ (function(){ if (document.getElementById("calc-global-styles")) return; const style = document.createElement("style"); style.id = "calc-global-styles"; style.textContent = ` .calc-card { background:#EFEFEF; border:1px solid #e0e0e0; border-radius:10px; padding:12px; margin:0 0 10px; max-width:560px; font-family:inherit; } .calc-title { margin:0 0 6px; font-size:15px; font-weight:700; line-height:1.2; } .calc-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; } .calc-field { display:flex; flex-direction:column; gap:3px; } .calc-label { font-size:13px; color:#222; line-height:1.1; margin:0; } .calc-label::after { content: ":"; margin-left:3px; } .calc-input, .calc-select { padding:8px 10px; border:1px solid #d2d2d2; border-radius:8px; font:inherit; height:36px; width:100%; box-sizing:border-box; background:#fff; line-height:1.2; } .calc-input:focus, .calc-select:focus { border-color:#4FB1DE; box-shadow:0 0 0 2px rgba(79,177,222,0.15); outline:none; } .calc-btn { margin-top:8px; padding:10px 12px; border:0; border-radius:8px; cursor:pointer; font-weight:700; width:100%; color:#fff; background:#4FB1DE; transition:filter .15s ease; height:40px; } .calc-btn:hover { filter:brightness(0.97); } .calc-result { margin-top:8px; } .calc-resgrid { display:grid; grid-template-columns: repeat(2, minmax(180px, 1fr)); gap:8px; } .calc-pill { background:#fff; border:1px solid #dcdcdc; border-radius:8px; padding:8px 10px; display:flex; align-items:center; justify-content:space-between; font-size:13px; font-weight:600; } .calc-pill span, .calc-pill b { line-height:1; display:inline-block; } .calc-pill b { color:#d35400; margin-left:8px; } .calc-note { margin-top:6px; font-size:11px; color:#666; line-height:1.2; } @media (max-width:560px){ .calc-grid { grid-template-columns:1fr; } .calc-resgrid { grid-template-columns:1fr; } } `; document.head.appendChild(style); })(); /* 2) Calculator */ (function(){ const HOST_SELECTORS = ".product__buy, .product-actions, #product-actions, .product__purchase, .buy-block, .product-info__buy, form[action*='cart']"; const OPTIONS_ANCHOR_SELECTORS = [ ".product__options", ".product-variants", ".product-form__options", ".product__choices", ".product-configurator", ".product-custom-fields", "[data-product-options]", "[id*='product-options']" ]; const toNumber = (v) => { if (typeof v !== "string") v = (v||0).toString(); v = v.trim().replace(/\s/g,'').replace(',', '.'); const n = parseFloat(v); return isNaN(n) ? 0 : n; }; const pctFactor = (pct) => 1 + ((parseInt(pct||"0",10)||0)/100); const detectLang = (forced)=>{ if (forced === "nl" || forced === "fr") return forced; const htmlLang = (document.documentElement.lang || "").toLowerCase(); const href = location.href.toLowerCase(); if (htmlLang.startsWith("fr") || /\/fr(\/|[-_])/.test(href) || /[-_.]fr\./.test(href)) return "fr"; return "nl"; }; const STR = (L)=>({ nl:{ t:{strips:"Rekenhulp: steenstrips",boards:"Rekenhulp: stuks per m²",coverage:"Rekenhulp: verbruik",range:"Rekenhulp: verbruik (min–max)"}, f:{m2:"Oppervlakte (m²)", lm:"Buitenhoeken (lm)", placing:"Plaatsing", with:"Met voeg", without:(f)=>`Zonder voeg (${f>=1?"+":"−"}${Math.round(Math.abs((f-1)*100))}%)`, waste:"Reserve"}, b:"Bereken", o:{flat:"Vlakke stenen", corner:"Hoekstenen", boxes:"dozen", noteStrips:(a,c,f,aj,jm)=> aj?(jm==="normal"?`* Vlak: ${a} m²/doos • Hoek: ${c} lm/doos • Zonder voeg = +${Math.round((f-1)*100)}%`:`* Vlak: ${a} m²/doos • Hoek: ${c} lm/doos • Met voeg = −${Math.round((1-f)*100)}%`):`* Vlak: ${a} m²/doos • Hoek: ${c} lm/doos • Plaatsing zonder voeg`} }, fr:{ t:{strips:"Calculateur : parement",boards:"Calculateur : pièces par m²",coverage:"Calculateur : consommation",range:"Calculateur : consommation (min–max)"}, f:{m2:"Surface (m²)", lm:"Angles extérieurs (ml)", placing:"Pose", with:"Avec joint", without:(f)=>`Sans joint (${f>=1?"+":"−"}${Math.round(Math.abs((f-1)*100))}%)`, waste:"Réserve"}, b:"Calculer", o:{flat:"Pierres plates", corner:"Pierres d’angle", boxes:"boîtes", noteStrips:(a,c,f,aj,jm)=> aj?(jm==="normal"?`* Face : ${a} m²/boîte • Angle : ${c} ml/boîte • Sans joint = +${Math.round((f-1)*100)}%`:`* Face : ${a} m²/boîte • Angle : ${c} ml/boîte • Avec joint = −${Math.round((1-f)*100)}%`):`* Face : ${a} m²/boîte • Angle : ${c} ml/boîte • Pose sans joint`} } })[L]; function buildStrips(marker, host){ const ds = marker.dataset; const LANG = detectLang((ds.lang||"").toLowerCase()); const T = STR(LANG); const areaPerBox = parseFloat(ds.areaPerBox||0.5); const cornerPerBox = parseFloat(ds.cornerPerBox||1); const allowJoint = (ds.allowJoint||"true").toLowerCase() !== "false"; const noJointFactor= parseFloat(ds.nojointFactor||1.2); const jointMode = (ds.jointMode||"normal").toLowerCase(); const reserveOpts = (ds.reserve||"0,5,10,15,20").split(",").map(s=>s.trim()).filter(Boolean); let optionsAnchor = null; for (const sel of OPTIONS_ANCHOR_SELECTORS) { const el = host.querySelector(sel); if (el) { optionsAnchor = el; break; } } const placing = allowJoint ? (jointMode==="normal" ? `` : ``) : `
      ${T.f.without(noJointFactor)}
      `; const waste = ``; const html = `

      ${T.t.strips}

      ${placing}
      ${waste}
      ${T.o.noteStrips(areaPerBox, cornerPerBox, noJointFactor, allowJoint, jointMode)}
      `; const wrap = document.createElement("div"); wrap.innerHTML = html; const card = wrap.firstElementChild; if (optionsAnchor && optionsAnchor.parentNode) optionsAnchor.parentNode.insertBefore(card, optionsAnchor); else host.insertBefore(card, host.firstChild); function setResults(pills){ const grid = document.getElementById("calc-resgrid"); grid.style.display = "grid"; grid.innerHTML = pills.map(p=>`
      ${p.label}${p.value}
      `).join(""); } function calc(){ const m2 = toNumber(document.getElementById("calc-m2").value); const lm = toNumber(document.getElementById("calc-lm").value); const reservePct = parseInt(document.getElementById("calc-reserve").value||"0",10); const rF = pctFactor(reservePct); let f = 1; if (allowJoint) f = parseFloat(document.getElementById("calc-place").value)||1; else f = parseFloat(document.getElementById("calc-place").getAttribute("data-fixed"))||1; const boxesFlat = Math.ceil(((m2 * f) / areaPerBox) * rF); const boxesCorner = lm>0 ? Math.ceil(((lm * f) / cornerPerBox) * rF) : 0; const out = [{label:T.o.flat, value:`${boxesFlat} ${T.o.boxes}`}]; if (lm>0) out.push({label:T.o.corner, value:`${boxesCorner} ${T.o.boxes}`}); setResults(out); } document.getElementById("calc-btn").addEventListener("click", calc); } function init(){ const host = document.querySelector(HOST_SELECTORS); const marker = document.querySelector(".calc-enable"); if (!host || !marker) return; const type = (marker.dataset.calcType||"").toLowerCase(); if (type === "strips") buildStrips(marker, host); // (Andere types kun je later inschakelen—dit houdt het nu simpel en stabiel) } function boot(){ init(); const obs = new MutationObserver(()=>init()); obs.observe(document.body, {childList:true, subtree:true}); } if (document.readyState==='loading') document.addEventListener('DOMContentLoaded', boot); else boot(); })();