mirror of
https://github.com/Sped0n/bridget.git
synced 2026-04-18 20:19:30 -07:00
feat(collection.ts): add image preloading functionality to improve performance and user experience
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { container } from '../container'
|
import { container } from '../container'
|
||||||
import { ImageJSON } from '../resources'
|
import { ImageJSON } from '../resources'
|
||||||
import { setIndex } from '../state'
|
import { getNextFive, setIndex } from '../state'
|
||||||
import { getRandom, Watchable } from '../utils'
|
import { Watchable, getRandom, onVisible } from '../utils'
|
||||||
import { slideUp } from './gallery'
|
import { slideUp } from './gallery'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,6 +44,15 @@ export function initCollection(ijs: ImageJSON[]): void {
|
|||||||
imgs.forEach((img, i) => {
|
imgs.forEach((img, i) => {
|
||||||
img.addEventListener('click', () => handleClick(i))
|
img.addEventListener('click', () => handleClick(i))
|
||||||
img.addEventListener('keydown', () => handleClick(i))
|
img.addEventListener('keydown', () => handleClick(i))
|
||||||
|
// preload
|
||||||
|
onVisible(img, () => {
|
||||||
|
// minues one because we want to preload the current and the next 4 images
|
||||||
|
getNextFive(i - 1, imgs.length)
|
||||||
|
.map((i) => imgs[i])
|
||||||
|
.forEach((e) => {
|
||||||
|
e.src = e.dataset.src!
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,8 +62,8 @@ export function initCollection(ijs: ImageJSON[]): void {
|
|||||||
|
|
||||||
function createCollection(ijs: ImageJSON[]): void {
|
function createCollection(ijs: ImageJSON[]): void {
|
||||||
// create container for images
|
// create container for images
|
||||||
const collection: HTMLDivElement = document.createElement('div')
|
const _collection: HTMLDivElement = document.createElement('div')
|
||||||
collection.className = 'collection'
|
_collection.className = 'collection'
|
||||||
// append images to container
|
// append images to container
|
||||||
for (let [i, ij] of ijs.entries()) {
|
for (let [i, ij] of ijs.entries()) {
|
||||||
// random x and y
|
// random x and y
|
||||||
@@ -62,12 +71,12 @@ function createCollection(ijs: ImageJSON[]): void {
|
|||||||
const y = i !== 0 ? getRandom(-30, 30) : 0
|
const y = i !== 0 ? getRandom(-30, 30) : 0
|
||||||
// element
|
// element
|
||||||
const e = document.createElement('img')
|
const e = document.createElement('img')
|
||||||
e.src = ij.loUrl
|
e.dataset.src = ij.loUrl
|
||||||
e.height = ij.loImgH
|
e.height = ij.loImgH
|
||||||
e.width = ij.loImgW
|
e.width = ij.loImgW
|
||||||
e.alt = 'image'
|
e.alt = 'image'
|
||||||
e.style.transform = `translate3d(${x}%, ${y - 50}%, 0)`
|
e.style.transform = `translate3d(${x}%, ${y - 50}%, 0)`
|
||||||
collection.append(e)
|
_collection.append(e)
|
||||||
}
|
}
|
||||||
container.append(collection)
|
container.append(_collection)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user