add comments

This commit is contained in:
Spedon
2023-03-26 20:52:29 +08:00
parent 3ba067b19e
commit 7f6cfe4366

View File

@@ -35,37 +35,51 @@ const disableListener = (): void => {
// enable overlay // enable overlay
export const overlayEnable = (): void => { export const overlayEnable = (): void => {
// show the overlay components
overlayCursor.style.zIndex = '100' overlayCursor.style.zIndex = '100'
// set overlay event listeners
setListener() setListener()
} }
// disable overlay // disable overlay
export const overlayDisable = (): void => { export const overlayDisable = (): void => {
// hide the overlay components
overlayCursor.style.zIndex = '-1' overlayCursor.style.zIndex = '-1'
// set overlay cursor text content to none
setCursorText('') setCursorText('')
// disable overlay event listeners
disableListener() disableListener()
} }
// handle close click // handle close click
async function handleCloseClick(): Promise<void> { async function handleCloseClick(): Promise<void> {
// disable overlay
overlayDisable() overlayDisable()
const indexesNum = trailingImageIndexes.length const indexesNum = trailingImageIndexes.length
// empty trail images indexes
emptyTrailingImageIndexes() emptyTrailingImageIndexes()
for (let i: number = 0; i < indexesNum; i++) { for (let i: number = 0; i < indexesNum; i++) {
const e: HTMLImageElement = images[calcImageIndex(globalIndex - i, imagesArrayLen)] // get element from index and store the index
trailingImageIndexes.unshift(calcImageIndex(globalIndex - i, imagesArrayLen)) const index: number = calcImageIndex(globalIndex - i, imagesArrayLen)
const e: HTMLImageElement = images[index]
trailingImageIndexes.unshift(index)
e.style.display = 'block'
e.style.zIndex = `${indexesNum - i - 1}`
// set different style for trailing and top image
if (i === 0) { if (i === 0) {
e.style.transitionDelay = '0s, 0.7s' e.style.transitionDelay = '0s, 0.7s'
e.dataset.status = 'resumeTop' e.dataset.status = 'resumeTop'
e.style.transform = transformCache[indexesNum - i - 1]
} else { } else {
e.style.transitionDelay = `${1.2 + 0.1 * i - 0.1}s` e.style.transform = transformCache[indexesNum - i - 1]
e.style.display = 'block' // e.style.transitionDelay = `${1.2 + 0.1 * i - 0.1}s`
e.style.transitionDelay = '1.5s'
e.dataset.status = 'resume' e.dataset.status = 'resume'
} }
e.style.transform = transformCache[indexesNum - i - 1]
e.style.zIndex = `${indexesNum - i - 1}`
} }
// halt the function while animation is running
await delay(1200 + stackDepth * 100 + 100) await delay(1200 + stackDepth * 100 + 100)
// add back enter overlay event listener to top image
addEnterOverlayEL(images[calcImageIndex(globalIndex, imagesArrayLen)]) addEnterOverlayEL(images[calcImageIndex(globalIndex, imagesArrayLen)])
for (let i: number = 0; i < indexesNum; i++) { for (let i: number = 0; i < indexesNum; i++) {
images[calcImageIndex(globalIndex - i, imagesArrayLen)].dataset.status = 'null' images[calcImageIndex(globalIndex - i, imagesArrayLen)].dataset.status = 'null'
@@ -77,9 +91,12 @@ async function handleCloseClick(): Promise<void> {
} }
const handlePrevClick = (): void => { const handlePrevClick = (): void => {
// get last displayed image's index
const imgIndex: number = calcImageIndex(globalIndex, imagesArrayLen) const imgIndex: number = calcImageIndex(globalIndex, imagesArrayLen)
// change global index and get current displayed image's index
globalIndexDec() globalIndexDec()
const prevImgIndex = calcImageIndex(globalIndex, imagesArrayLen) const prevImgIndex: number = calcImageIndex(globalIndex, imagesArrayLen)
// store current displayed image's index
pushIndex( pushIndex(
prevImgIndex, prevImgIndex,
trailingImageIndexes, trailingImageIndexes,
@@ -89,17 +106,24 @@ const handlePrevClick = (): void => {
true, true,
false false
) )
// hide last displayed image
images[imgIndex].style.display = 'none' images[imgIndex].style.display = 'none'
images[imgIndex].dataset.status = 'trail'
center(images[prevImgIndex]) center(images[prevImgIndex])
images[prevImgIndex].dataset.status = 'top' images[prevImgIndex].dataset.status = 'top'
// process complete, show the image
images[prevImgIndex].style.display = 'block' images[prevImgIndex].style.display = 'block'
// change index display
imgIndexSpanUpdate(prevImgIndex + 1, imagesArrayLen) imgIndexSpanUpdate(prevImgIndex + 1, imagesArrayLen)
} }
const handleNextClick = (): void => { const handleNextClick = (): void => {
// get last displayed image's index
const imgIndex: number = calcImageIndex(globalIndex, imagesArrayLen) const imgIndex: number = calcImageIndex(globalIndex, imagesArrayLen)
// change global index and get current displayed image's index
globalIndexInc() globalIndexInc()
const nextImgIndex = calcImageIndex(globalIndex, imagesArrayLen) const nextImgIndex: number = calcImageIndex(globalIndex, imagesArrayLen)
// store current displayed image's index
pushIndex( pushIndex(
nextImgIndex, nextImgIndex,
trailingImageIndexes, trailingImageIndexes,
@@ -109,15 +133,23 @@ const handleNextClick = (): void => {
false, false,
false false
) )
// hide last displayed image
images[imgIndex].style.display = 'none' images[imgIndex].style.display = 'none'
images[imgIndex].dataset.status = 'trail'
// process the image going to display
center(images[nextImgIndex]) center(images[nextImgIndex])
images[nextImgIndex].dataset.status = 'top' images[nextImgIndex].dataset.status = 'top'
// process complete, show the image
images[nextImgIndex].style.display = 'block' images[nextImgIndex].style.display = 'block'
// change index display
imgIndexSpanUpdate(nextImgIndex + 1, imagesArrayLen) imgIndexSpanUpdate(nextImgIndex + 1, imagesArrayLen)
} }
// change text and position of overlay cursor
const handleOverlayMouseMove = (e: MouseEvent): void => { const handleOverlayMouseMove = (e: MouseEvent): void => {
// set text position
setTextPos(e) setTextPos(e)
// set text content
if (e.clientX < oneThird) { if (e.clientX < oneThird) {
setCursorText('PREV') setCursorText('PREV')
overlayCursor.dataset.status = 'PREV' overlayCursor.dataset.status = 'PREV'
@@ -129,6 +161,7 @@ const handleOverlayMouseMove = (e: MouseEvent): void => {
overlayCursor.dataset.status = 'NEXT' overlayCursor.dataset.status = 'NEXT'
} }
} }
const handleOverlayClick = (): void => { const handleOverlayClick = (): void => {
switch (overlayCursor.dataset.status) { switch (overlayCursor.dataset.status) {
case 'PREV': case 'PREV':
@@ -145,7 +178,9 @@ const handleOverlayClick = (): void => {
// set event listener // set event listener
const setListener = (): void => { const setListener = (): void => {
// add mouse move event listener (for overlay text cursor)
window.addEventListener('mousemove', handleOverlayMouseMove, { passive: true }) window.addEventListener('mousemove', handleOverlayMouseMove, { passive: true })
// add close/prev/next click event listener
overlayCursor.addEventListener('click', handleOverlayClick, { passive: true }) overlayCursor.addEventListener('click', handleOverlayClick, { passive: true })
} }
@@ -153,6 +188,7 @@ export const vwRefreshInit = (): void => {
window.addEventListener( window.addEventListener(
'resize', 'resize',
() => { () => {
// refresh value of one third
oneThird = Math.round(window.innerWidth / 3) oneThird = Math.round(window.innerWidth / 3)
// reset footer height // reset footer height
const r = document.querySelector(':root') as HTMLStyleElement const r = document.querySelector(':root') as HTMLStyleElement
@@ -162,8 +198,8 @@ export const vwRefreshInit = (): void => {
r.style.setProperty('--footer-height', '31px') r.style.setProperty('--footer-height', '31px')
} }
// recenter image (only in overlay) // recenter image (only in overlay)
const i: HTMLImageElement = images[calcImageIndex(globalIndex, imagesArrayLen)] if (images[calcImageIndex(globalIndex, imagesArrayLen)].dataset.status === 'top')
if (i.dataset.status === 'top') center(i) center(images[calcImageIndex(globalIndex, imagesArrayLen)])
}, },
{ passive: true } { passive: true }
) )