1030 lines
25 KiB
JavaScript
1030 lines
25 KiB
JavaScript
|
|
|
|
function ben(element) {
|
|
return document.querySelector(element);
|
|
};
|
|
|
|
function benA(elements) {
|
|
return document.querySelectorAll(elements);
|
|
};
|
|
|
|
|
|
//############################################# -- Intro Animations
|
|
|
|
const preloader = ben("#preloader-container");
|
|
const heroTextSection = ben(".hero-section > div:nth-child(2)");
|
|
const myImageBlock = ben(".benjamin-image-block-wrapper");
|
|
const myBigTextBlock = ben(".benjamin-big-text-block");
|
|
const mainTextBlock = ben(".main-text-block");
|
|
const mainCTA = ben(".main-cta-button");
|
|
const allHeaderElements = benA("header *:not(header > div)");
|
|
const mountains = ben("#mountains");
|
|
const clouds = ben("#clouds");
|
|
const footerController = ben(".contact-section-controller");
|
|
const header = ben("header");
|
|
const heroTxtGraphic = ben(".hero-text-section-graphic");
|
|
const socialLinks = ben("header > div:nth-of-type(2)");
|
|
// const heroTextGraphics = ben(".hero-text-section-graphic");
|
|
|
|
|
|
function intro() {
|
|
|
|
preloader.style.pointerEvents = "none";
|
|
|
|
anime({
|
|
targets: preloader,
|
|
opacity: 0,
|
|
// pointerEvents: "none",
|
|
easing: "easeOutQuad",
|
|
duration: 1200,
|
|
delay: 800,
|
|
});
|
|
|
|
if (window.innerWidth > 800) {
|
|
anime({
|
|
targets: heroTextSection,
|
|
width: [0, "50%"],
|
|
translateX: [200, 0],
|
|
easing: "cubicBezier( 0.93, 0, 0.09, 1 )",
|
|
duration: 1500,
|
|
delay: 1000,
|
|
});
|
|
} else if (window.innerWidth < 801 && window.innerWidth > 600) {
|
|
anime({
|
|
targets: heroTextSection,
|
|
width: [0, "60%"],
|
|
translateX: [200, 0],
|
|
easing: "cubicBezier( 0.93, 0, 0.09, 1 )",
|
|
duration: 1500,
|
|
delay: 1000,
|
|
});
|
|
} else if (window.innerWidth < 601) {
|
|
anime({
|
|
targets: heroTextSection,
|
|
width: [0, "100%"],
|
|
translateX: [500, 0],
|
|
easing: "cubicBezier( 0.93, 0, 0.09, 1 )",
|
|
duration: 1500,
|
|
delay: 0,
|
|
});
|
|
}
|
|
|
|
anime({
|
|
targets: allHeaderElements,
|
|
translateX: [-20, 0],
|
|
// rotateY: [50, 0],
|
|
opacity: [0, 1],
|
|
easing: "easeOutQuad",
|
|
duration: 800,
|
|
delay: anime.stagger(100, { start: 1000 }/* , {easing: 'easeOutQuad'} */),
|
|
});
|
|
|
|
anime({
|
|
targets: myBigTextBlock,
|
|
translateY: [100, 0],
|
|
translateZ: 50,
|
|
opacity: [0, 1],
|
|
easing: "cubicBezier( 0.1, 0.63, 0.355, 1 )",
|
|
duration: 1200,
|
|
delay: 2000,
|
|
});
|
|
|
|
anime({
|
|
targets: myImageBlock,
|
|
translateY: [100, 0],
|
|
opacity: [0, 1],
|
|
easing: "cubicBezier( 0.1, 0.63, 0.355, 1 )",
|
|
duration: 1500,
|
|
delay: 2200,
|
|
});
|
|
|
|
if (window.innerWidth < 601) {
|
|
anime({
|
|
targets: mainTextBlock,
|
|
translateX: [-50, 0],
|
|
translateZ: [30, 0],
|
|
opacity: [0, 1],
|
|
easing: "cubicBezier( 0.1, 0.63, 0.355, 1 )",
|
|
duration: 1200,
|
|
delay: 2500,
|
|
});
|
|
} else {
|
|
anime({
|
|
targets: mainTextBlock,
|
|
translateX: [-50, 0],
|
|
translateZ: [30, 15],
|
|
opacity: [0, 1],
|
|
easing: "cubicBezier( 0.1, 0.63, 0.355, 1 )",
|
|
duration: 1200,
|
|
delay: 2500,
|
|
});
|
|
}
|
|
|
|
|
|
anime({
|
|
targets: mainCTA,
|
|
translateX: [-50, 0],
|
|
opacity: [0, 1],
|
|
easing: "cubicBezier( 0.1, 0.63, 0.355, 1 )",
|
|
duration: 1200,
|
|
delay: 2600,
|
|
});
|
|
|
|
anime({
|
|
targets: mountains,
|
|
translateY: [
|
|
{ value: 200, duration: 0, delay: 0 },
|
|
{ value: 0, duration: 1500, delay: 1000 }
|
|
],
|
|
left: [
|
|
{ value: 0, duration: 0, delay: 0 },
|
|
{ value: -50, duration: 800, delay: 1600 },
|
|
],
|
|
opacity: [
|
|
{ value: 0, duration: 0, delay: 0 },
|
|
{ value: 1, duration: 1500, delay: 1000 },
|
|
],
|
|
easing: "cubicBezier(0.1, 0.63, 0.355, 1)",
|
|
});
|
|
|
|
anime({
|
|
targets: heroTxtGraphic,
|
|
opacity: [0, 1],
|
|
translateZ: [100, 10],
|
|
easing: "easeOutQuad",
|
|
duration: 1200,
|
|
delay: 2000,
|
|
});
|
|
|
|
anime({
|
|
targets: benA(".hero-text-section-graphic *"),
|
|
opacity: [0, 1],
|
|
easing: "easeOutQuad",
|
|
duration: 800,
|
|
delay: anime.stagger(300, { start: 3000 }, { easing: 'easeOutQuad' }),
|
|
});
|
|
|
|
}
|
|
|
|
// Intro Initialization
|
|
|
|
function introInit() {
|
|
|
|
if (window.innerWidth < 601) {
|
|
anime({
|
|
targets: heroTextSection,
|
|
width: [0],
|
|
translateX: 500,
|
|
duration: 0
|
|
});
|
|
} else {
|
|
anime({
|
|
targets: heroTextSection,
|
|
width: [0],
|
|
translateX: 200,
|
|
duration: 0
|
|
});
|
|
}
|
|
|
|
|
|
|
|
anime({
|
|
targets: allHeaderElements,
|
|
translateX: [-20],
|
|
opacity: [0],
|
|
duration: 0
|
|
});
|
|
|
|
anime({
|
|
targets: myBigTextBlock,
|
|
translateY: [100],
|
|
opacity: [0],
|
|
duration: 0
|
|
});
|
|
|
|
anime({
|
|
targets: myImageBlock,
|
|
translateY: [100],
|
|
opacity: [0],
|
|
duration: 0
|
|
});
|
|
|
|
anime({
|
|
targets: mainTextBlock,
|
|
translateX: [-50],
|
|
opacity: [0],
|
|
duration: 0
|
|
});
|
|
|
|
anime({
|
|
targets: mainCTA,
|
|
translateX: [-50],
|
|
opacity: [0],
|
|
duration: 0
|
|
});
|
|
|
|
anime({
|
|
targets: mountains,
|
|
opacity: 0,
|
|
duration: 0
|
|
});
|
|
|
|
}
|
|
|
|
introInit();
|
|
|
|
|
|
|
|
|
|
|
|
//############################################# -- Header Scroll interactions
|
|
|
|
var headerController = ben("#header-controller");
|
|
var windowRect = {
|
|
rootMargin: "0px",
|
|
};
|
|
|
|
var headerObserver = new IntersectionObserver(changeHeader, windowRect);
|
|
|
|
function changeHeader(entry) {
|
|
|
|
if (entry[0].isIntersecting) {
|
|
|
|
if (window.innerWidth > 800) {
|
|
benA(".nav-link.footer-special").forEach(item => {
|
|
|
|
if (entry[0].target.className == "contact-section-controller") {
|
|
item.style.color = "white";
|
|
}
|
|
});
|
|
|
|
header.className = "none";
|
|
|
|
anime({
|
|
targets: "header > a > img",
|
|
width: 40,
|
|
height: 100,
|
|
top: 0,
|
|
duration: 400,
|
|
easing: "easeOutCubic",
|
|
});
|
|
}
|
|
|
|
anime({
|
|
targets: "header > a > div",
|
|
translateX: 0,
|
|
opacity: 1,
|
|
duration: 1000,
|
|
});
|
|
|
|
if (window.innerWidth < 801 && window.innerWidth > 450) {
|
|
anime({
|
|
targets: socialLinks,
|
|
opacity: 1,
|
|
easing: "easeOutCubic",
|
|
duration: 300,
|
|
});
|
|
}
|
|
|
|
} else {
|
|
|
|
if (window.innerWidth > 800) {
|
|
|
|
// if (entry[0].isIntersecting) {
|
|
|
|
benA(".nav-link.footer-special").forEach(item => {
|
|
|
|
if (entry[0].target.className == "contact-section-controller") { item.style.color = ""; }
|
|
});
|
|
|
|
|
|
header.classList.add("scrolled");
|
|
|
|
anime({
|
|
targets: "header > a > img",
|
|
width: 60,
|
|
height: 130,
|
|
top: 20,
|
|
duration: 400,
|
|
easing: "easeOutCubic",
|
|
});
|
|
// }
|
|
}
|
|
|
|
anime({
|
|
targets: "header > a > div",
|
|
translateX: -50,
|
|
opacity: 0,
|
|
duration: 1000,
|
|
});
|
|
|
|
if (window.innerWidth < 801 && window.innerWidth > 450) {
|
|
anime({
|
|
targets: socialLinks,
|
|
opacity: 0,
|
|
easing: "easeOutCubic",
|
|
duration: 300,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//############################################# -- Window Load
|
|
|
|
|
|
|
|
|
|
window.addEventListener("load", () => {
|
|
setTimeout(() => { intro(); }, 1000);
|
|
setTimeout(() => { headerObserver.observe(headerController); }, 3000);
|
|
|
|
if (window.innerWidth > 800) {
|
|
setTimeout(() => {
|
|
window.addEventListener("mousemove", parralaxMouse);
|
|
// footerHeaderFn();
|
|
}, 4000);
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//############################################# -- Secitons intersection Observer
|
|
|
|
const sections = benA(".scroll-into-view");
|
|
//var sectionContainer = document.querySelector(".my-work-section > div:nth-child(2)");
|
|
|
|
let footerHeaderFn = () => { headerObserver.observe(footerController); };
|
|
|
|
var windowRect2 = {
|
|
rootMargin: "0px 0px -200px 0px",
|
|
};
|
|
|
|
var sectionsIO = new IntersectionObserver(sectionsObserverFn, windowRect2);
|
|
|
|
function sectionsObserverFn(entries) {
|
|
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
// console.log(entry.target);
|
|
entry.target.classList.add("scrolled-into-view");
|
|
|
|
if (entry.target.id == "footer-right-section" && entries[2]) { return; }
|
|
|
|
|
|
if (window.innerWidth > 800) { footerHeaderFn(); }
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
sections.forEach(item => {
|
|
sectionsIO.observe(item);
|
|
});
|
|
|
|
|
|
|
|
//############################################# -- Content intersection Observer
|
|
|
|
const contents = benA(".scroll-into-view-content");
|
|
const contentsIO = new IntersectionObserver(contentsObserverFn, { rootMargin: "0px 0px -100px 0px" });
|
|
|
|
const contentsAlt = benA(".scroll-into-view-content-2");
|
|
const contentsIOAlt = new IntersectionObserver(contentsObserverFn, { rootMargin: "0px" });
|
|
|
|
function contentsObserverFn(entries) {
|
|
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.animate([
|
|
{
|
|
transform: "none",
|
|
opacity: 1,
|
|
}
|
|
], {
|
|
duration: 1300,
|
|
easing: "cubic-bezier(0.1, 0.63, 0.355, 1)",
|
|
fill: "forwards",
|
|
delay: (entry.target.dataset.delay),
|
|
});
|
|
|
|
contentsIO.unobserve(entry.target);
|
|
contentsIOAlt.unobserve(entry.target);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
const myImageAboutSectionObserver = new IntersectionObserver(contentsObserverAboutImg, { rootMargin: "0px 0px -200px 0px", });
|
|
const myImageAbout = ben(".about-me-section img");
|
|
|
|
function contentsObserverAboutImg(entries) {
|
|
|
|
if (entries[0].isIntersecting) {
|
|
myImageAbout.animate([
|
|
{
|
|
transform: "none",
|
|
opacity: .5,
|
|
}
|
|
], {
|
|
duration: 1300,
|
|
easing: "cubic-bezier(0.1, 0.63, 0.355, 1)",
|
|
fill: "forwards",
|
|
delay: 1000,
|
|
});
|
|
|
|
myImageAboutSectionObserver.unobserve(myImageAbout);
|
|
}
|
|
|
|
}
|
|
|
|
myImageAboutSectionObserver.observe(myImageAbout);
|
|
|
|
|
|
|
|
contents.forEach(item => {
|
|
contentsIO.observe(item);
|
|
});
|
|
|
|
|
|
contentsAlt.forEach(item => {
|
|
contentsIOAlt.observe(item);
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//############################################# -- Scroll Navigations
|
|
|
|
anime({
|
|
targets: ".hero-text-section-graphic img",
|
|
translateY: [-5, 5],
|
|
easing: "easeInOutQuad",
|
|
duration: 1000,
|
|
loop: true,
|
|
direction: "alternate",
|
|
});
|
|
|
|
const navSections = benA("section");
|
|
const myWorkNavLink = ben("#my-work-link");
|
|
const aboutMeNavLink = ben("#about-me-link");
|
|
const resumeLink = ben("#resume-link");
|
|
const contactMeNavLink = ben("#contact-me-link");
|
|
|
|
const anchorLinksObserver = new IntersectionObserver(anchorLinksFn, { rootMargin: "0px", threshold: 0.75 });
|
|
|
|
navSections.forEach(item => { anchorLinksObserver.observe(item); });
|
|
|
|
function anchorLinksFn(entries) {
|
|
|
|
if (entries[3]) { return; }
|
|
|
|
entries.forEach(entry => {
|
|
|
|
myWorkNavLink.classList.remove("active-anchor");
|
|
aboutMeNavLink.classList.remove("active-anchor");
|
|
resumeLink.classList.remove("active-anchor");
|
|
contactMeNavLink.classList.remove("active-anchor");
|
|
|
|
if (entry.target.className == "hero-section") {
|
|
return;
|
|
} else if (entry.target.className == "my-work-section") {
|
|
myWorkNavLink.classList.add("active-anchor");
|
|
} else if (entry.target.className == "about-me-section") {
|
|
aboutMeNavLink.classList.add("active-anchor");
|
|
} else if (entry.target.className == "my-specialties-section") {
|
|
resumeLink.classList.add("active-anchor");
|
|
} else if (entry.target.className == "contact-section") {
|
|
contactMeNavLink.classList.add("active-anchor");
|
|
} else {
|
|
myWorkNavLink.classList.remove("active-anchor");
|
|
aboutMeNavLink.classList.remove("active-anchor");
|
|
resumeLink.classList.remove("active-anchor");
|
|
contactMeNavLink.classList.remove("active-anchor");
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
// anchorLinksObserver.observe(navSections[2], navSections[3]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//############################################# -- Mousemove interactions
|
|
|
|
|
|
function parralaxMouse(event) {
|
|
|
|
let xPos = (event.clientX / window.innerWidth) - 0.5;
|
|
let yPos = (event.clientY / window.innerHeight) - 0.5;
|
|
|
|
// mountains.style.transition = "all .7s ease";
|
|
|
|
// let items = [clouds, mountains, myImageBlock, mainTextBlock, heroTxtGraphic, myBigTextBlock];
|
|
|
|
// items.forEach(item => { item.style.transition = "all 1s ease" });
|
|
|
|
// clouds.animate([{
|
|
// transform: `translateX(${xPos * -10}px) translateY(${yPos * -10}px)`,
|
|
// }], {
|
|
// easing: "ease",
|
|
// fill: "forwards",
|
|
// });
|
|
|
|
// mountains.animate([{
|
|
// transform: `translateX(${xPos * -100}px) translateY(${yPos * -20}px)`,
|
|
// }], {
|
|
// easing: "ease",
|
|
// fill: "forwards",
|
|
// direction: "normal"
|
|
// });
|
|
|
|
// myImageBlock.animate([{
|
|
// transform: `translateX(${xPos * -30}px) translateY(${yPos * -10}px) rotateX(${yPos * 4}deg) rotateY(${xPos * -3}deg)`,
|
|
// }], {
|
|
// easing: "ease",
|
|
// fill: "forwards",
|
|
// });
|
|
|
|
// mainTextBlock.animate([{
|
|
// transform: `translateZ(15px) rotateX(${yPos * 2}deg) rotateY(${xPos * -2}deg)`,
|
|
// }], {
|
|
// easing: "ease-out",
|
|
// fill: "forwards",
|
|
// });
|
|
|
|
// heroTxtGraphic.animate([{
|
|
// transform: `translateX(${xPos * -5}px) translateY(${yPos * -5}px) translateZ(10px) rotateX(${yPos * 2}deg) rotateY(${xPos * -2}deg)`,
|
|
// }], {
|
|
// easing: "ease",
|
|
// fill: "forwards",
|
|
// });
|
|
|
|
// myBigTextBlock.animate([{
|
|
// transform: `translateX(${xPos * -40}px) translateY(${yPos * -20}px) translateZ(50px) rotateX(${yPos * 4}deg) rotateY(${xPos * -3}deg)`,
|
|
// }], {
|
|
// easing: "ease",
|
|
// fill: "forwards",
|
|
// });
|
|
|
|
|
|
anime({
|
|
targets: mountains,
|
|
translateX: xPos * -100,
|
|
translateY: yPos * -20,
|
|
easing: "easeOutQuad",
|
|
duration: 700,
|
|
});
|
|
|
|
anime({
|
|
targets: clouds,
|
|
translateX: xPos * -10,
|
|
translateY: yPos * -10,
|
|
easing: "easeOutQuad",
|
|
duration: 500,
|
|
});
|
|
|
|
anime({
|
|
targets: myImageBlock,
|
|
translateX: xPos * -30,
|
|
translateY: yPos * -10,
|
|
easing: "easeOutQuad",
|
|
duration: 500,
|
|
rotateX: yPos * 4,
|
|
rotateY: xPos * -3
|
|
});
|
|
|
|
anime({
|
|
targets: myBigTextBlock,
|
|
translateX: xPos * -40,
|
|
translateY: yPos * -20,
|
|
translateZ: 50,
|
|
rotateX: yPos * 4,
|
|
rotateY: xPos * -3,
|
|
easing: "easeOutQuad",
|
|
duration: 500,
|
|
});
|
|
|
|
anime({
|
|
targets: mainTextBlock,
|
|
translateZ: 15,
|
|
rotateX: yPos * 2,
|
|
rotateY: xPos * -2,
|
|
easing: "easeOutQuad",
|
|
duration: 300,
|
|
});
|
|
|
|
anime({
|
|
targets: heroTxtGraphic,
|
|
translateX: xPos * -5,
|
|
translateY: yPos * -5,
|
|
translateZ: 10,
|
|
rotateX: yPos * 2,
|
|
rotateY: xPos * -2,
|
|
easing: "easeOutQuad",
|
|
duration: 300,
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const uiuxDesignerLinks = benA(".main-hero-text a");
|
|
const myImage = ben(".benjamin-image-block");
|
|
const myImageOverlay = ben(".benjamin-image-block-overlay");
|
|
const serviceDisplay = ben(".service-display-block");
|
|
|
|
uiuxDesignerLinks.forEach(item => {
|
|
|
|
item.addEventListener("mouseover", function (event) {
|
|
|
|
// myImage.style.transform = "rotateX(1deg) rotateY(2deg) rotateZ(-2deg) translateZ(20px) translateX(20px)";
|
|
myImage.style.width = "20vw";
|
|
|
|
if (event.target.className == "uiux-designer-link") {
|
|
|
|
myImageOverlay.style.backgroundColor = "rgba(237,125,113,0.8)";
|
|
|
|
} else if (event.target.className == "web-designer-link") {
|
|
|
|
myImageOverlay.style.backgroundColor = "rgba(117,240,230,0.8)";
|
|
// serviceDisplay.style.width = "300px";
|
|
// serviceDisplay.style.height = "250px";
|
|
|
|
} else if (event.target.className == "frontend-designer-link") {
|
|
|
|
myImageOverlay.style.backgroundColor = "rgba(116,123,239,0.8)";
|
|
// serviceDisplay.style.width = "250px";
|
|
// serviceDisplay.style.height = "200px";
|
|
|
|
} else if (event.target.className == "graphic-motion-designer-link") {
|
|
|
|
myImageOverlay.style.backgroundColor = "rgba(28,55,102,0.8)";
|
|
// serviceDisplay.style.width = "200px";
|
|
// serviceDisplay.style.height = "200px";
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
uiuxDesignerLinks.forEach(item => {
|
|
|
|
|
|
item.addEventListener("mouseout", function () {
|
|
|
|
myImage.style.transform = "none";
|
|
myImageOverlay.style.backgroundColor = "transparent";
|
|
myImage.style.width = "100%";
|
|
// serviceDisplay.style.opacity = "0";
|
|
// serviceDisplay.style.transform = "none";
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//############################################# -- Mobile hamburger interactrions
|
|
|
|
const hamburgerButton = ben(".hamburger-button");
|
|
const mobileNavWrapper = ben("header > div:nth-of-type(1)");
|
|
let a = 0;
|
|
|
|
hamburgerButton.addEventListener("click", () => {
|
|
|
|
if (a == 0) {
|
|
|
|
if (window.innerWidth > 449) {
|
|
|
|
mobileNavWrapper.animate([
|
|
{
|
|
opacity: 0,
|
|
height: "0px",
|
|
pointerEvents: "none",
|
|
transform: "translateZ(50px) translateY(-50px)"
|
|
},
|
|
{
|
|
opacity: 1,
|
|
height: "350px",
|
|
pointerEvents: "visible",
|
|
transform: "translateZ(0px) translateY(0px)"
|
|
}
|
|
], {
|
|
fill: "both",
|
|
duration: 300,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
} else {
|
|
mobileNavWrapper.animate([
|
|
{
|
|
opacity: 0,
|
|
height: "0px",
|
|
pointerEvents: "none",
|
|
transform: "translateZ(50px) translateY(-50px)"
|
|
},
|
|
{
|
|
opacity: 1,
|
|
height: "420px",
|
|
pointerEvents: "visible",
|
|
transform: "translateZ(0px) translateY(0px)"
|
|
}
|
|
], {
|
|
fill: "both",
|
|
duration: 300,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
}
|
|
|
|
anime({
|
|
targets: socialLinks,
|
|
opacity: 1,
|
|
easing: "easeOutCubic",
|
|
duration: 300,
|
|
});
|
|
|
|
} else {
|
|
|
|
if (window.innerWidth > 449) {
|
|
mobileNavWrapper.animate([
|
|
{
|
|
opacity: 1,
|
|
height: "350px",
|
|
pointerEvents: "visible",
|
|
transform: "translateZ(0px) translateY(0px)"
|
|
|
|
},
|
|
{
|
|
opacity: 0,
|
|
height: "0px",
|
|
pointerEvents: "none",
|
|
transform: "translateZ(50px) translateY(-50px)"
|
|
}
|
|
], {
|
|
fill: "both",
|
|
duration: 300,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
} else {
|
|
mobileNavWrapper.animate([
|
|
{
|
|
opacity: 1,
|
|
height: "420px",
|
|
pointerEvents: "visible",
|
|
transform: "translateZ(0px) translateY(0px)"
|
|
|
|
},
|
|
{
|
|
opacity: 0,
|
|
height: "0px",
|
|
pointerEvents: "none",
|
|
transform: "translateZ(50px) translateY(-50px)"
|
|
}
|
|
], {
|
|
fill: "both",
|
|
duration: 300,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
}
|
|
|
|
anime({
|
|
targets: socialLinks,
|
|
opacity: 0,
|
|
easing: "easeOutCubic",
|
|
duration: 300,
|
|
});
|
|
|
|
a = -1;
|
|
}
|
|
|
|
a++;
|
|
|
|
// mobileNavWrapper.style.opacity = "1"
|
|
});
|
|
|
|
|
|
hamburgerButton.addEventListener("blur", () => {
|
|
|
|
if (a == 1) {
|
|
|
|
if (window.innerWidth > 449) {
|
|
|
|
mobileNavWrapper.animate([
|
|
{
|
|
opacity: 1,
|
|
height: "350px",
|
|
pointerEvents: "visible",
|
|
transform: "translateZ(0px) translateY(0px)"
|
|
|
|
},
|
|
{
|
|
opacity: 0,
|
|
height: "0px",
|
|
pointerEvents: "none",
|
|
transform: "translateZ(50px) translateY(-50px)"
|
|
}
|
|
], {
|
|
fill: "both",
|
|
duration: 600,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
|
|
} else {
|
|
mobileNavWrapper.animate([
|
|
{
|
|
opacity: 1,
|
|
height: "420px",
|
|
pointerEvents: "visible",
|
|
transform: "translateZ(0px) translateY(0px)"
|
|
|
|
},
|
|
{
|
|
opacity: 0,
|
|
height: "0px",
|
|
pointerEvents: "none",
|
|
transform: "translateZ(50px) translateY(-50px)"
|
|
}
|
|
], {
|
|
fill: "both",
|
|
duration: 600,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
}
|
|
|
|
anime({
|
|
targets: socialLinks,
|
|
opacity: 0,
|
|
easing: "easeOutCubic",
|
|
duration: 300,
|
|
});
|
|
|
|
a = 0;
|
|
}
|
|
|
|
// mobileNavWrapper.style.opacity = "1"
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ben(".my-specialties-section button").addEventListener("click", () => {
|
|
window.location = "docs/Benjamin-Toby-CV.pdf";
|
|
});
|
|
|
|
|
|
|
|
|
|
//############################################# -- My Work Slider
|
|
|
|
const portfolioContainter = ben(".portfolio-items-container");
|
|
const portfolioEntries = benA(".portfolio-entry");
|
|
const portfolioLeftButton = ben(".portfolio-left-button");
|
|
const portfolioRightButton = ben(".portfolio-right-button");
|
|
|
|
let p = 0;
|
|
|
|
function portfolioClickEvents() {
|
|
|
|
// anime({
|
|
// targets: portfolioEntries,
|
|
// opacity: [1, 0],
|
|
// translateZ: [0, -50],
|
|
// duration: 300,
|
|
// easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
// });
|
|
|
|
if (p == 0) {
|
|
portfolioLeftButton.style.opacity = ".2";
|
|
} else if (p == (portfolioEntries.length - 1)) {
|
|
portfolioRightButton.style.opacity = ".2";
|
|
}
|
|
|
|
|
|
portfolioEntries.forEach(entry => {
|
|
// entry.style.opacity = "0";
|
|
|
|
entry.animate([
|
|
{ opacity: 0, transform: "translateZ(-50px)", pointerEvents: "none" }
|
|
], {
|
|
duration: 500,
|
|
fill: "both",
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
});
|
|
|
|
// portfolioEntries[p].style.opacity = "1";
|
|
// anime({
|
|
// targets: (portfolioEntries[p]),
|
|
// opacity: [0, 1],
|
|
// translateZ: [-50, 0],
|
|
// duration: 300,
|
|
// easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )",
|
|
// delay: 200,
|
|
// });
|
|
|
|
portfolioEntries[p].animate([
|
|
{ opacity: 1, transform: "translateZ(0px)", pointerEvents: "visible" }
|
|
], {
|
|
duration: 500,
|
|
fill: "both",
|
|
delay: 200,
|
|
easing: "cubic-bezier( 0.1, 0.63, 0.355, 1 )"
|
|
});
|
|
}
|
|
|
|
portfolioClickEvents();
|
|
portfolioLeftButton.style.opacity = ".2";
|
|
|
|
portfolioRightButton.addEventListener("click", () => {
|
|
if (p == (portfolioEntries.length - 1)) { return; };
|
|
p++;
|
|
portfolioClickEvents();
|
|
portfolioLeftButton.style.opacity = "1";
|
|
});
|
|
|
|
portfolioLeftButton.addEventListener("click", () => {
|
|
if (p == 0) { return; };
|
|
p--;
|
|
portfolioClickEvents();
|
|
portfolioRightButton.style.opacity = "1";
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//############################################# -- Lottie Animations
|
|
|
|
const portfolioEntry1 = ben("#transcend-barriers");
|
|
const portfolioEntry2 = ben("#github-to-asana-animation");
|
|
|
|
const portfolioEntry1Animation = lottie.loadAnimation({
|
|
container: portfolioEntry1,
|
|
renderer: 'svg',
|
|
loop: true,
|
|
autoplay: true,
|
|
path: "scripts/portfolio-item-1.json"
|
|
});
|
|
|
|
const portfolioEntry2Animation = lottie.loadAnimation({
|
|
container: portfolioEntry2,
|
|
renderer: 'svg',
|
|
loop: true,
|
|
autoplay: true,
|
|
path: "scripts/portfolio-item-2.json"
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|