Ortolan Extra 772 KS has been developed especially for use with non-absorbent steel formwork in the precast concrete segment. MC-Bauchemie 2016
Ortolan Extra 772 KS has been developed especially for use with non-absorbent steel formwork in the precast concrete segment.
© MC-Bauchemie 2016
When aiming for component surfaces that are as free of defects as possible, precast factories are still putting their faith in solvent-based concrete release agents. Although these products usually deliver the required results, they also have unwanted side effects. It is mandatory to label them as hazardous in accordance with dangerous goods legislation, they are pungently odorous and they constitute a burden both on the environment and on the workers having to handle them. With such poor environmental compatibility and lacking occupational hygiene, they are no longer state-of-the-art.
Excellent concrete surfaces plus environmental friendliness and occupational safety
With Ortolan Extra 772 KS, on the other hand, precast manufacturers not only get excellent concrete surfaces, they can also count on effective protection for their people, their formwork and the environment. As an aqueous, mineral oil-based and solvent-free concrete release emulsion – MC’s latest generation in this line – Ortolan Extra 772 KS has little odour and is rapidly biodegradable. It meets relevant test criteria according to OECD 301F. Its water hazard class corresponds to Germany’s WGK 1 (lowest grade). And the corrosion inhibitor incorporated within Ortolan Extra 772 KS prevents rusting. The highly effective base oils protect the formwork and, with regular use, will extend mould service lifetimes.
The special composition of this concrete release emulsion also ensures that, once applied by spraying, it forms a self-levelling oil film to fully cover the metal surface. When the water components have evaporated, the formwork surface is left with a very thin yet highly effective and water-resistant separating film that yields a bright, smooth and porosity-free concrete finish with minimal concrete residue left on the formwork. Yet the release agent does not adversely affect the adhesion of subsequent coatings on the concrete, such as plasters or paints. As an application tool, MC-Bauchemie recommends the special MC sprayer MC-Spezialspitze for a quick, easy and reliable film coating.
pageImpression = pageImpression + 1;
});
barba.init({
preventRunning: true,
timeout: 5000,
/*
for debuggin usi this parameters
debug: false,
logLevel: 'debug',
*/
/*sync: true,*/
// define a custom function that will prevent Barba
// from working on links that contains a `prevent` CSS class
prevent: ({ el, event, href }) => {
if (!el) {
return false;
}
if (el.href && el.href.includes('landingpages')) {
return true;
}
if (el.classList && el.classList.contains('prevent')) {
return true;
}
return false;
},
preventScroll: true,
scroll: false,
views: [],
transitions: [
{
name: 'header-transition',
sync: false,
from: {
custom: ({ trigger }) => {
if (trigger.classList && trigger.classList.contains('headerFlip')) {
transistionImage = trigger.getElementsByClassName("transitionImage")[0];
if (typeof transistionImage == "undefined") {
return false;
}
transisitionEffect = getRandomInt(1);
return true;
}
return false;
}
},
async leave(data) {
if (transistionImage === null) return; // can be null, return if null to not throw an error
if ( transisitionEffect == 0) {
const done = this.async();
let element = transistionImage;
let state = Flip.getState(element);
let headerImage = document.getElementById('headerImage');
headerImage.removeChild(headerImage.getElementsByTagName('img')[0]);
let headerContent = document.querySelector('.headerContent');
gsap.to(headerContent, {
opacity: 0,
});
let content = document.querySelector('.content');
gsap.to(content, {
opacity: 0,
});
headerImage.appendChild(element);
scroll(0,0);
Flip.from(state, {duration:0.9, ease: "power1.inOut", scale: true, absolute:true,});
await delay(900); // Der await Operator wird genutzt, um auf einen Promise zu warten. Er kann nur in einer async Funktion benutzt werden.
done();
}
},
enter(data) {
window.scrollTop = '0';
let content = data.next.container.querySelector('.content');
gsap.from(content, {
opacity: 0,
});
let headerContent = data.next.container.querySelector('.headerContent');
gsap.from(headerContent, {
opacity: 0,
delay: 0.5,
});
},
after(data) {
}
},
{
name: 'microsites_sliding_scroll',
sync: true,
from: {
custom: (data) => {
const { trigger, current, next } = data;
function getParent(pathname) {
const parts = pathname.split('/').filter(part => part !== '')
return parts.length > 1 ? parts[parts.length - 2] : parts[0] || null
}
if (trigger === 'popstate' || trigger === 'back' || trigger === 'forward') {
return false;
}
if(trigger.classList.contains('microsites_sliding_scroll') || trigger.classList.contains('sliding_scroll')){
return true;
}
if(current.namespace == 'template_138' && next.namespace == 'template_138') {
return getParent(current.url.path) === getParent(next.url.path)
}
return false;
}
},
to: {
namespace: [
'template_120',
'template_138',
]
},async leave({ current, next, trigger }) {
const debug = window.debug;
if (debug) console.log('Debug mode enabled');
const done = this.async();
const menuindexCurrent = +current.container.querySelector('[data-menuindex]').dataset.menuindex;
const menuindexNext = +next.container.querySelector('[data-menuindex]').dataset.menuindex;
const nextContent = next.container.querySelector('.content');
const currentContent = current.container.querySelector('.content');
let xPerc = menuindexCurrent < menuindexNext ? 100 : -100;
const navbarHeight = document.querySelector('.navbar').offsetHeight;
const pageHeight = document.querySelector('.header').offsetHeight;
const nextContentHeight = nextContent.offsetHeight;
const totalHeight = nextContentHeight + navbarHeight + pageHeight;
document.body.style.minHeight = `${totalHeight}px`;
const targetScrollY = trigger.classList.contains('microsites_sliding_scroll')
? pageHeight - navbarHeight
: pageHeight + navbarHeight;
const top = trigger.classList.contains('microsites_sliding_scroll') ? '0px' : '116px';
gsap.set(next.container, {
xPercent: xPerc,
position: 'absolute',
top: top,
left: 0,
display: 'block'
});
const tl = gsap.timeline({
onComplete: () => {
gsap.set(current.container, { display: "none" });
gsap.set(next.container, { clearProps: 'position,top,left,xPercent' });
gsap.set(nextContent, { clearProps: 'xPercent' });
document.body.style.minHeight = '';
done();
}
});
tl.to(currentContent, {
xPercent: -xPerc,
duration: debug ? 5 : 0.5,
ease: "power1.inOut",
}, 0);
tl.to(nextContent, {
xPercent: -xPerc,
duration: debug ? 5 : 0.5,
ease: "power1.inOut"
}, 0);
tl.to(window, {
scrollTo: { y: targetScrollY },
duration: debug ? 5 : 0.5,
ease: "power1.inOut"
}, 0);
},
enter({ next }) {
gsap.from(next.container, {
opacity: 0,
});
}
},
{
name: 'microsites_sliding',
sync: true,
from: {
custom: ({ trigger }) => {
if (trigger === 'popstate' || trigger === 'back' || trigger === 'forward') {
return false;
}
if(trigger.classList.contains('microsites_sliding')){
return true;
}
return false;
}
},
to: {
namespace: [
'template_120',
]
},
async leave({current, next}) {
const done = this.async();
const tl = gsap.timeline({onComplete: ()=>{
gsap.set(next.container, {clearProps: 'all'})
gsap.set(next.container.querySelector('.content'), {clearProps: 'all'})
}})
const currentContent = current.container.querySelector('.content')
const nextContent = next.container.querySelector('.content')
const currentH1 = document.querySelector('.currentPagetitle')
const currentIntrotext = document.querySelector('.currentIntrotext')
const nextH1 = next.container.querySelector('.pageTitle')
const nextIntrotext = next.container.querySelector('.introtext')
gsap.set(next.container, { xPercent: 100, position: 'absolute', top: 0, left: 0 })
tl.to(currentContent, {xPercent: -100, opacity: 0, duration: 1, ease: "power1.inOut", onComplete: () => {
gsap.set(current.container, { display: "none" });
}}, 0)
.to([currentH1, currentIntrotext], { opacity: 0, duration: 0.5, ease: "power1.inOut", onComplete: () => {
currentH1.innerText = nextH1.innerText;
currentIntrotext.innerText = nextIntrotext.innerText;
}}, 0)
.to([currentH1, currentIntrotext], { opacity: 1, duration: 0.5, ease: "power1.inOut" }, 0.5)
.to(nextContent, {xPercent: -100, duration: 1, ease: "power1.inOut"}, 0)
await delay(1000);
done();
},
enter({next}){
gsap.from(next.container, {
opacity: 0,
});
}
},
{
name: 'default',
sync: false,
async leave(data) {
const done = this.async();
gsap.to(data.current.container, {
opacity: 0,
duration: 0.5,
});
await delay(500); // Der await Operator wird genutzt, um auf einen Promise zu warten. Er kann nur in einer async Funktion benutzt werden.
scroll(0,0);
done();
},
enter(data) {
window.scrollTop = '0';
gsap.from(data.next.container, {
opacity: 0,
duration: 0.5,
});
},
after(data) {
// START: Ankur - 15062023 - For Scroll Position History
if(scrollHistory[data.next.url.href]) {
let scroll = scrollHistory[data.next.url.href];
window.scrollTo({top: scroll.y, behavior: 'instant'});
}
// END: Ankur
}
},
{
name: 'self',
enter() {
},
}
]
});
});