178 lines
5.3 KiB
JavaScript
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
|
|
} |