alexdaniels.me/assets/landing.js

65 lines
2 KiB
JavaScript
Raw Normal View History

2026-06-03 17:18:50 -07:00
import './styles/landing.css';
import './stimulus_bootstrap.js';
const mobileMenu = () => {
const icon = document.querySelector('.icon-menu');
const menu = document.querySelector('.front-menu');
2026-06-05 11:10:00 -07:00
const header = document.querySelector('header');
const body = document.querySelector('body');
2026-06-03 17:18:50 -07:00
icon.addEventListener('click', (event) => {
icon.classList.toggle('open');
menu.classList.toggle('open');
2026-06-05 11:10:00 -07:00
header.classList.toggle('open');
body.classList.toggle('menu-open');
2026-06-03 17:18:50 -07:00
});
}
const jobInfoToggle = () => {
const jobs = document.querySelectorAll('#work .jobs .job');
jobs.forEach((job) => {
job.addEventListener('click', (event) => {
const jobId = job.dataset.jobId;
const jobInfo = document.querySelector(`#${jobId}`);
const activeJobLabel = document.querySelector('#work .jobs .job.active');
if (jobInfo.classList.contains('hide')) {
const openJob = document.querySelector('#work .jobs .job-highlight.show');
if (jobInfo.classList.contains('hide')) {
jobInfo.classList.remove('hide');
jobInfo.classList.add('show');
openJob.classList.remove('show');
openJob.classList.add('hide');
}
}
if (!job.classList.contains('active')) {
job.classList.add('active');
activeJobLabel.classList.remove('active');
}
});
});
}
const scrollTo = () => {
const links = document.querySelectorAll('#outro .menu a');
links.forEach((link) => {
link.addEventListener('click', (event) => {
const anchor = link.dataset.scrollTo;
const element = document.querySelector(`#${anchor}`).scrollIntoView();
window.history.pushState({}, '', `#${anchor}`);
})
});
}
document.addEventListener('turbo:load', (event) => {
mobileMenu();
jobInfoToggle();
scrollTo();
});