Files

41 lines
1.6 KiB
TypeScript
Raw Permalink Normal View History

2026-05-24 21:58:23 -07:00
document
.querySelectorAll<HTMLDivElement>('div.widget-project')
.forEach(project => {
let currentImage = 0
const galleryDots = project.querySelectorAll<HTMLDivElement>('div.gallery-dot')!
const galleryItems = project.querySelectorAll<HTMLImageElement>('img.gallery-image')!
const galleryScroll = project.querySelector<HTMLDivElement>('div.project-gallery-scroll')!
const gapOffset = parseInt(window
.getComputedStyle(galleryScroll)
.getPropertyValue('gap')
)
function ScrollImage(shouldAdd: boolean) {
// Over/Underflow Handling
shouldAdd ? currentImage++ : currentImage--
if (currentImage < 0) currentImage = galleryItems.length - 1
const desiredIndex = (currentImage % galleryItems.length)
// Set Active Dot
galleryDots.forEach((e, i) => {
i === desiredIndex ?
e.classList.add('gallery-dot-active')
: e.classList.remove('gallery-dot-active')
})
// Scroll over to image
let scrollOffset = 0
for (let i = 0; i < desiredIndex; i++) {
scrollOffset += galleryItems[i].offsetWidth + gapOffset
}
galleryScroll.scrollLeft = scrollOffset
}
// Back/Next Buttons
project
.querySelector('button#last')!
.addEventListener('click', () => ScrollImage(false))
project
.querySelector('button#next')!
.addEventListener('click', () => ScrollImage(true))
})