Initial commit
This commit is contained in:
178
js/main.js
Normal file
178
js/main.js
Normal file
@@ -0,0 +1,178 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user