336 lines
8.8 KiB
JavaScript
336 lines
8.8 KiB
JavaScript
import React from "react";
|
|
import Image from "next/image";
|
|
import { withRouter } from "next/router";
|
|
import { gsap } from "gsap/dist/gsap";
|
|
import { ScrollTrigger } from "gsap/dist/ScrollTrigger.js";
|
|
|
|
import Link from "next/link";
|
|
|
|
import Logo from "./media/logo.jsx";
|
|
import laserteileImg from './images/fertigungsverfahren/laserteile.svg'
|
|
import stanzteileImg from './images/fertigungsverfahren/stanzteile.svg'
|
|
import biegeteileImg from './images/fertigungsverfahren/biegeteile.svg'
|
|
import lasergravurImg from './images/fertigungsverfahren/lasergravur.svg'
|
|
import blechkonstruktionImg from './images/fertigungsverfahren/blechkonstruktion.svg'
|
|
import baugruppenImg from './images/fertigungsverfahren/baugruppen.svg'
|
|
import fuegeverfahrenImg from './images/fertigungsverfahren/fuegeverfahren.svg'
|
|
import entgrattechnikImg from './images/fertigungsverfahren/entgrattechnik.svg'
|
|
|
|
gsap.registerPlugin(ScrollTrigger);
|
|
|
|
class Navbar extends React.Component {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.toggle = this.toggle.bind(this);
|
|
this.toggleClose = this.toggleClose.bind(this);
|
|
this.isLg = this.isLg.bind(this);
|
|
|
|
this.state = {
|
|
isOpen: false,
|
|
menuitems: [
|
|
{
|
|
key: 0,
|
|
name: "Home",
|
|
link: "/",
|
|
},
|
|
{
|
|
key: 1,
|
|
name: "Fertigungsverfahren",
|
|
link: "/fertigungsverfahren",
|
|
},
|
|
{
|
|
key: 2,
|
|
name: "Materialien",
|
|
link: "/materialien",
|
|
},
|
|
{
|
|
key: 3,
|
|
name: "Qualität",
|
|
link: "/qualitaet",
|
|
},
|
|
{
|
|
key: 4,
|
|
name: "Branchen",
|
|
link: "/branchen",
|
|
},
|
|
{
|
|
key: 5,
|
|
name: "Kontakt",
|
|
link: "/kontakt",
|
|
},
|
|
]
|
|
};
|
|
}
|
|
|
|
componentDidUpdate(props, prevProps) {
|
|
if (this.props.isOpen !== prevProps.isOpen) {
|
|
if (this.state.isOpen) {
|
|
gsap.to(".navbar-collapse", {
|
|
height: "auto",
|
|
});
|
|
} else if (!this.state.isOpen) {
|
|
if (!this.isLg()) {
|
|
gsap.to(".navbar-collapse", {
|
|
height: 0,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
toggle() {
|
|
this.setState({
|
|
isOpen: !this.state.isOpen,
|
|
});
|
|
}
|
|
toggleClose() {
|
|
this.setState({
|
|
isOpen: false,
|
|
});
|
|
}
|
|
|
|
isLg() {
|
|
if (
|
|
(self.innerWidth && self.innerWidth >= 992) ||
|
|
(document.documentElement &&
|
|
document.documentElement.clientWidth &&
|
|
document.documentElement.clientWidth >= 992) ||
|
|
(document.body && document.body.clientWidth >= 992)
|
|
) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
componentDidMount() {
|
|
if (!this.isLg()) {
|
|
gsap.set(".navbar-collapse", {
|
|
height: 0,
|
|
});
|
|
}
|
|
|
|
let targets = gsap.utils.toArray(".subnav-container div");
|
|
|
|
gsap
|
|
.timeline({
|
|
scrollTrigger: {
|
|
trigger: "body",
|
|
start: "top+=200 top",
|
|
end: "+=300",
|
|
scrub: 0.1,
|
|
},
|
|
})
|
|
.to(".subnav-container", {
|
|
height: 0,
|
|
ease: "power1.inOut",
|
|
})
|
|
.to(
|
|
targets,
|
|
{
|
|
opacity: 0,
|
|
ease: "power4.inOut",
|
|
},
|
|
0
|
|
);
|
|
}
|
|
|
|
render() {
|
|
const pathname = this.props.router.pathname;
|
|
return (
|
|
<>
|
|
<nav
|
|
className="noselect navbar navbar-expand-lg fixed-top"
|
|
onToggle={this.toggle}
|
|
>
|
|
<Link href="/" onClick={this.toggleClose}>
|
|
<a className="navbar-brand">
|
|
<Logo />
|
|
</a>
|
|
</Link>
|
|
<button
|
|
onClick={this.toggle}
|
|
className="navbar-toggler"
|
|
type="button"
|
|
>
|
|
<div
|
|
className={
|
|
this.state.isOpen ? "animated-icon open" : "animated-icon"
|
|
}
|
|
>
|
|
<span />
|
|
<span />
|
|
<span />
|
|
<span />
|
|
</div>
|
|
</button>
|
|
<div className="mainnav-container d-flex justify-content-around">
|
|
<div className="navbar-collapse">
|
|
<div className="navbar-nav">
|
|
{this.state.menuitems.map((menuitem, index) => (
|
|
<div key={menuitem.key} className="nav-item">
|
|
<Link href={menuitem.link}>
|
|
<a onClick={this.toggleClose}>{menuitem.name}</a>
|
|
</Link>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="subnav-container d-flex flex-row flex-nowrap align-items-center">
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/laserteile"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={laserteileImg}
|
|
alt="Laserteile Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Laserteile</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/stanzteile"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={stanzteileImg}
|
|
alt="Stanzteile Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Stanzteile</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/biegeteile"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={biegeteileImg}
|
|
alt="Biegeteile Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Biegeteile</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/lasergravur"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={lasergravurImg}
|
|
alt="Lasergravur Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Lasergravur</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/blechkonstruktionen"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={blechkonstruktionImg}
|
|
alt="Blechkonstruktionen Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Blechkonstruktionen</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/baugruppen"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={baugruppenImg}
|
|
alt="Baugruppen Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Baugruppen</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/fügeverfahren"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={fuegeverfahrenImg}
|
|
alt="Fügeverfahren Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Fügeverfahren</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="nav-subitem">
|
|
<Link
|
|
href={"/fertigungsverfahren/entgrattechnik"}
|
|
className="nav-link"
|
|
>
|
|
<a>
|
|
<Image
|
|
src={entgrattechnikImg}
|
|
alt="Entgrattechnik Icon"
|
|
layout="intrinsic"
|
|
width={50}
|
|
height={50}
|
|
/>
|
|
<div>Entgrattechnik</div>
|
|
</a>
|
|
</Link>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</nav>
|
|
</>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default withRouter(Navbar);
|