Files
PineCreek_Web_2.0/js/main.js
2026-06-14 19:56:38 -04:00

178 lines
5.3 KiB
JavaScript

const hamburger = document.getElementById('hamburger'),
mainNav = document.querySelector('#mainNav ul'),
navItem = document.getElementsByClassName('nav-item')
// Nav toggle, open, close
const toggleNav = () => {
!(mainNav.classList.contains('in')) ? (
mainNav.classList.add('in'),
hamburger.classList.add('in')
) : (
mainNav.classList.remove('in'),
hamburger.classList.remove('in')
)
},
openNav = () => mainNav.classList.add('in'),
closeNav = () => mainNav.classList.remove('in')
// Hamburger menu icon click
hamburger.onclick = toggleNav
// Nav items on click: close nav (mobile) and smooth-scroll to anchor targets
for (let i = 0; i < navItem.length; i++) {
navItem[i].onclick = function (e) {
// prevent default anchor jump; we'll smooth-scroll with offset instead
e.preventDefault()
// close mobile nav if open
closeNav()
const href = this.getAttribute('href') || ''
if (href.startsWith('#')) {
const target = document.querySelector(href)
if (target) {
// compute offset to account for fixed header
const header = document.getElementById('mainNav')
const headerHeight = header ? header.offsetHeight : 0
const extra = 8 // small spacing under header
const targetY = window.pageYOffset + target.getBoundingClientRect().top - headerHeight - extra
window.scrollTo({ top: targetY, behavior: 'smooth' })
return
}
}
// fallback: follow the link if it's not an in-page anchor
if (href) window.location.href = href
}
}
// If the page is loaded with a hash or the hash changes, adjust scroll to account for the fixed header
const scrollToHashWithOffset = (hash) => {
if (!hash) return
const target = document.querySelector(hash)
if (!target) return
const header = document.getElementById('mainNav')
const headerHeight = header ? header.offsetHeight : 0
const extra = 8
const targetY = window.pageYOffset + target.getBoundingClientRect().top - headerHeight - extra
// Use a short timeout to allow browser default jump to complete before adjusting
setTimeout(() => window.scrollTo({ top: targetY, behavior: 'smooth' }), 50)
}
window.addEventListener('load', () => scrollToHashWithOffset(location.hash))
window.addEventListener('hashchange', () => scrollToHashWithOffset(location.hash))
// light auth
window.onload = () => {
const board = document.getElementById('boardPage'),
owner = document.getElementById('ownerPage')
if (board || owner) {
const response = prompt('Please enter the password.')
switch (response) {
case '12345':
console.log('Board Member')
break
case 'abcde':
console.log('Owner')
break
default:
console.log('Access Denied')
break
}
}
}
// Slides
const slidesVineyard = document.getElementById('slidesVineyard'),
slidesVineyardLeft = document.querySelector('#slidesVineyard .slides-arrow:nth-last-child(2)'),
slidesVineyardRight = document.querySelector('#slidesVineyard .slides-arrow:last-child'),
slidesVineyardImg = document.querySelector('#slidesVineyard .slides-img'),
slidesHouse = document.getElementById('slidesHouse'),
slidesHouseLeft = document.querySelector('#slidesHouse .slides-arrow:nth-last-child(2)'),
slidesHouseRight = document.querySelector('#slidesHouse .slides-arrow:last-child'),
slidesHouseImg = document.querySelector('#slidesHouse .slides-img')
let vineyardImgs = 0
slidesVineyardRight.onclick = () => {
vineyardImgs = vineyardImgs + 1
slidesVineyardImg.classList.add('out')
setTimeout(() => {
slidesVineyardImg.setAttribute('src', 'img/vineyard-' + vineyardImgs + '.jpg')
slidesVineyardImg.classList.remove('out')
if (vineyardImgs >= 1) {
slidesVineyardLeft.classList.remove('out')
}
}, 150)
}
slidesVineyardLeft.onclick = () => {
slidesVineyardImg.classList.add('out')
setTimeout(() => {
slidesVineyardImg.classList.remove('out')
if (vineyardImgs > 0) {
vineyardImgs = vineyardImgs - 1
slidesVineyardImg.setAttribute('src', 'img/vineyard-' + vineyardImgs + '.jpg')
}
if (vineyardImgs < 1) {
slidesVineyardLeft.classList.add('out')
}
}, 150)
}
const imgVineyardError = (image) => {
vineyardImgs = 0
image.src = 'img/vineyard-0.jpg'
setTimeout(() => {
if (vineyardImgs < 1) {
slidesVineyardLeft.classList.add('out')
}
}, 150)
return true
}
let houseImgs = 0
slidesHouseRight.onclick = () => {
houseImgs = houseImgs + 1
slidesHouseImg.classList.add('out')
setTimeout(() => {
slidesHouseImg.setAttribute('src', 'img/house-' + houseImgs + '.jpg')
slidesHouseImg.classList.remove('out')
if (houseImgs >= 1) {
slidesHouseLeft.classList.remove('out')
}
}, 150)
}
slidesHouseLeft.onclick = () => {
slidesHouseImg.classList.add('out')
setTimeout(() => {
slidesHouseImg.classList.remove('out')
if (houseImgs > 0) {
houseImgs = houseImgs - 1
slidesHouseImg.setAttribute('src', 'img/house-' + houseImgs + '.jpg')
}
if (houseImgs < 1) {
slidesHouseLeft.classList.add('out')
}
}, 150)
}
const imgHouseError = (image) => {
houseImgs = 0
image.src = 'img/house-0.jpg'
setTimeout(() => {
if (houseImgs < 1) {
slidesHouseLeft.classList.add('out')
}
}, 150)
return true
}