fix(gallery.ts): solve circular dependency in mobile view

This commit is contained in:
Sped0n
2023-11-02 12:29:39 +08:00
parent 0cc97325c0
commit d936f1b272
3 changed files with 16 additions and 6 deletions

View File

@@ -1,16 +1,16 @@
import { container } from '../container' import { container } from '../container'
import { type ImageJSON } from '../resources' import { type ImageJSON } from '../resources'
import { setIndex } from '../state' import { setIndex } from '../state'
import { Watchable, getRandom, onVisible } from '../utils' import { getRandom, onVisible } from '../utils'
import { slideUp } from './gallery' import { slideUp } from './gallery'
import { mounted } from './mounted'
/** /**
* variables * variables
*/ */
export let imgs: HTMLImageElement[] = [] export let imgs: HTMLImageElement[] = []
export const mounted = new Watchable<boolean>(false)
/** /**
* main functions * main functions
@@ -32,8 +32,8 @@ export function initCollection(ijs: ImageJSON[]): void {
.getElementsByClassName('collection') .getElementsByClassName('collection')
.item(0) as HTMLDivElement .item(0) as HTMLDivElement
// add watcher // add watcher
mounted.addWatcher(() => { mounted.addWatcher((o) => {
if (mounted.get()) { if (o) {
collection.classList.remove('hidden') collection.classList.remove('hidden')
} else { } else {
collection.classList.add('hidden') collection.classList.add('hidden')

View File

@@ -6,7 +6,7 @@ import { type ImageJSON } from '../resources'
import { setIndex, state } from '../state' import { setIndex, state } from '../state'
import { Watchable, expand } from '../utils' import { Watchable, expand } from '../utils'
import { imgs, mounted } from './collection' import { mounted } from './mounted'
import { scrollable } from './scroll' import { scrollable } from './scroll'
/** /**
@@ -21,6 +21,7 @@ const isAnimating = new Watchable<boolean>(false)
let lastIndex = -1 let lastIndex = -1
let indexDispNums: HTMLSpanElement[] = [] let indexDispNums: HTMLSpanElement[] = []
let galleryImages: HTMLImageElement[] = [] let galleryImages: HTMLImageElement[] = []
let collectionImages: HTMLImageElement[] = []
/** /**
* main functions * main functions
@@ -83,6 +84,12 @@ export function initGallery(ijs: ImageJSON[]): void {
gallery = document.getElementsByClassName('gallery').item(0) as HTMLDivElement gallery = document.getElementsByClassName('gallery').item(0) as HTMLDivElement
curtain = document.getElementsByClassName('curtain').item(0) as HTMLDivElement curtain = document.getElementsByClassName('curtain').item(0) as HTMLDivElement
galleryImages = Array.from(gallery.getElementsByTagName('img')) galleryImages = Array.from(gallery.getElementsByTagName('img'))
collectionImages = Array.from(
document
.getElementsByClassName('collection')
.item(0)
?.getElementsByTagName('img') ?? []
)
// state watcher // state watcher
state.addWatcher(() => { state.addWatcher(() => {
const s = state.get() const s = state.get()
@@ -117,7 +124,7 @@ function changeSlide(slide: number): void {
} }
function scrollToActive(): void { function scrollToActive(): void {
imgs[state.get().index].scrollIntoView({ collectionImages[state.get().index].scrollIntoView({
block: 'center', block: 'center',
behavior: 'auto' behavior: 'auto'
}) })

View File

@@ -0,0 +1,3 @@
import { Watchable } from '../utils'
export const mounted = new Watchable<boolean>(false)