mirror of
https://github.com/Sped0n/bridget.git
synced 2026-04-14 10:09:31 -07:00
* feat: refactor file structure and imports in mobile and desktop components - Removed the import of `scrollable` from `assets/ts/mobile/scroll.ts` - Renamed `assets/ts/mobile/mounted.ts` to `assets/ts/mobile/state.ts` - Changed the import of `active` from `./stage` to `./state` in `assets/ts/desktop/customCursor.ts` - Changed the import of `active` from `../state` to `../globalState` in `assets/ts/desktop/stage.ts` - Changed the import of `active` from `./stage` to `./state` in `assets/ts/desktop/stageNav.ts` - Renamed `assets/ts/state.ts` to `assets/ts/globalState.ts` - Created a new file `assets/ts/desktop/state.ts` - Added the interface `HistoryItem` to `assets/ts/desktop/state.ts` - Added the variables `cordHist`, `isOpen`, `active`, and `isLoading` to `assets/ts/desktop/state.ts` - Deleted the function `loader` from `assets/ts/desktop/stage.ts` and replaced it with `setLoaderForImage` - Deleted the import of `./stage` from `assets/ts/desktop/stageNav.ts` - Added the import of `minimizeImage` from `./stage` in `assets/ts/desktop/stageNav.ts` - Deleted the import of `./mounted` from `assets/ts/mobile/collection.ts` - Changed the import of `mounted` from `./mounted` to `./state` in ` * refactor: refactor the `onVisible` function to improve performance - Modify the type of the `onVisible` function parameter `T` to extend `HTMLElement` - Change the `entries.forEach` loop in the `onVisible` function to `entries.every` * feat: add new function for detecting opacity changes in element - Add a new function `onOpacityOne` in `assets/ts/utils.ts` - The function uses a `MutationObserver` to check for opacity changes on an element - When the element's opacity reaches `1`, the provided callback function is called - The `MutationObserver` is disconnected after the callback is executed * refactor: refactor function names and parameters in intersection and mutation observers - Change the function name `onVisible` to `onIntersection` - Modify the `callback` parameter in the `onIntersection` function to accept `IntersectionObserverEntry[]` and `IntersectionObserver` parameters - Remove the code block that checks for intersection ratio and immediately calls the `callback` function in the `onIntersection` function - Modify the function name `onOpacityOne` to `onMutation` - Modify the `callback` parameter in the `onMutation` function to accept `MutationRecord[]` and `MutationObserver` parameters - Add a default value for the `observeOptions` parameter in the `onMutation` function * refactor: refine preload logic on both mobile and desktop * refactor: refactor import statements and add new files - The import statement for `Watchable` in `assets/ts/globalState.ts` has been changed from `../utils` to `../globalUtils` - The import statement for `Watchable` in `assets/ts/desktop/state.ts` has been changed from `../utils` to `../globalUtils` - The import statement for `decrement` and `increment` in `assets/ts/desktop/stageNav.ts` has been changed from `../utils` to `../globalUtils` - A new file `utils.ts` has been added in the `assets/ts/desktop` directory - The import statements for `getRandom`, `onIntersection`, and `type MobileImage` in `assets/ts/mobile/collection.ts` have been changed from `../utils` to `./utils` - The `imgs` array in `assets/ts/mobile/collection.ts` has been changed from an array of `HTMLImageElement` to an array of `MobileImage` - The import statements for `expand`, `loadGsap`, `loadSwiper`, and `removeDuplicates` in `assets/ts/mobile/gallery.ts` have been changed from `../utils` to `../globalUtils` - The import statement for `type MobileImage` in `assets/ts/mobile/gallery.ts` has been changed from `./utils` to `../mobile/utils` - The `galleryLoadImages` function in `assets/ts/mobile/gallery.ts` has been removed - A new file `utils.ts` * refactor: refactor swiper import and functions in mobile and global utils * refactor: refactor navigation and image loading logic in desktop and mobile * refactor: remove print function and optimize removeDuplicates return * refactor: update text variable assignments and attributes * refactor: update variable types in galleryImages and collectionImages in mobile/gallery.ts * refactor: refactor variable types for consistency with naming conventions * refactor: update animation durations and types in gallery functions * refactor: refactor image loading logic and add console logs * refactor: refactor sass hierarchy * refactor: remove console logs in multiple files
92 lines
1.9 KiB
TypeScript
92 lines
1.9 KiB
TypeScript
import {
|
|
Watchable,
|
|
decrement,
|
|
getThresholdSessionIndex,
|
|
increment
|
|
} from './globalUtils'
|
|
|
|
/**
|
|
* types
|
|
*/
|
|
|
|
export type State = typeof defaultState
|
|
export type NavVec = 'next' | 'none' | 'prev'
|
|
|
|
/**
|
|
* variables
|
|
*/
|
|
|
|
const thresholds = [
|
|
{ threshold: 20, trailLength: 20 },
|
|
{ threshold: 40, trailLength: 10 },
|
|
{ threshold: 80, trailLength: 5 },
|
|
{ threshold: 140, trailLength: 5 },
|
|
{ threshold: 200, trailLength: 5 }
|
|
]
|
|
|
|
const defaultState = {
|
|
index: -1,
|
|
length: 0,
|
|
threshold: thresholds[getThresholdSessionIndex()].threshold,
|
|
trailLength: thresholds[getThresholdSessionIndex()].trailLength
|
|
}
|
|
|
|
export const state = new Watchable<State>(defaultState)
|
|
export const isAnimating = new Watchable<boolean>(false)
|
|
export const navigateVector = new Watchable<NavVec>('none')
|
|
|
|
/**
|
|
* main functions
|
|
*/
|
|
|
|
export function initState(length: number): void {
|
|
const s = state.get()
|
|
s.length = length
|
|
updateThreshold(s, 0)
|
|
state.set(s)
|
|
}
|
|
|
|
export function setIndex(index: number): void {
|
|
const s = state.get()
|
|
s.index = index
|
|
state.set(s)
|
|
}
|
|
|
|
export function incIndex(): void {
|
|
const s = state.get()
|
|
s.index = increment(s.index, s.length)
|
|
state.set(s)
|
|
}
|
|
|
|
export function decIndex(): void {
|
|
const s = state.get()
|
|
s.index = decrement(s.index, s.length)
|
|
state.set(s)
|
|
}
|
|
|
|
export function incThreshold(): void {
|
|
let s = state.get()
|
|
s = updateThreshold(s, 1)
|
|
state.set(s)
|
|
}
|
|
|
|
export function decThreshold(): void {
|
|
let s = state.get()
|
|
s = updateThreshold(s, -1)
|
|
state.set(s)
|
|
}
|
|
|
|
/**
|
|
* helper
|
|
*/
|
|
|
|
function updateThreshold(state: State, inc: number): State {
|
|
const i = thresholds.findIndex((t) => state.threshold === t.threshold) + inc
|
|
// out of bounds
|
|
if (i < 0 || i >= thresholds.length) return state
|
|
// storage the index so we can restore it even if we go to another page
|
|
sessionStorage.setItem('thresholdsIndex', i.toString())
|
|
const newItems = thresholds[i]
|
|
return { ...state, ...newItems }
|
|
}
|