@fastkit/scroller 0.14.5 â 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/scroller.mjs.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
package/dist/scroller.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util.ts","../src/logger.ts","../src/prevent-scroll.ts","../src/scroll/schemes.ts","../src/scroll/easings.ts","../src/scroll/util.ts","../src/scroll/scroll-by-internal.ts","../src/scroll/scroll-by.ts","../src/scroll/scroll-to.ts","../src/scroll/scroll-to-element.ts","../src/scroll/scroll-to-side.ts","../src/scroller.ts"],"names":["isBodyElement","ScrollerState"],"mappings":"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","file":"scroller.mjs","sourcesContent":["// export const HAS_WINDOW = typeof window !== 'undefined';\n\n// export function warn(message: string): void {\n// if (typeof console === 'object' && console.warn) {\n// console.warn(`[scroller] ${message}`);\n// }\n// }\n\n// export function error(message: string): Error {\n// return new Error(`[scroller] ${message}`);\n// }\n\nexport function isDocumentElement(el: Element): el is HTMLHtmlElement {\n return el.constructor === HTMLHtmlElement;\n}\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.constructor === HTMLBodyElement;\n}\n\nexport function isRootElement(\n el: Element,\n): el is HTMLHtmlElement | HTMLBodyElement {\n return isDocumentElement(el) || isBodyElement(el);\n}\n","import { TinyLogger } from '@fastkit/tiny-logger';\n\nexport const logger = new TinyLogger('scroller');\n","// space: 32, page up: 33, page down: 34, end: 35, home: 36\n// left: 37, up: 38, right: 39, down: 40\nexport const SCROLLABLE_KEY_CODES = [32, 33, 34, 35, 36, 37, 38, 39, 40];\n\nexport interface PreventScrollOptions {\n hideScrollbar: boolean;\n}\n\nexport interface PreventScrollContext {\n options: PreventScrollOptions;\n el: PreventScrollElement;\n overflowOrigin?: string | null;\n lockPosition: {\n x: number;\n y: number;\n };\n}\n\nexport interface PreventScrollElement extends HTMLElement {\n __ps_ctx__: PreventScrollContext;\n}\n\nconst eventListenerOptions: AddEventListenerOptions = {\n passive: false,\n};\n\nconst handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n};\n\nconst handleScroll = (e: Event) => {\n const el = e.target as PreventScrollElement;\n if (el && el.__ps_ctx__) {\n el.scrollTo(el.__ps_ctx__.lockPosition.x, el.__ps_ctx__.lockPosition.y);\n }\n};\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (\n e.target &&\n ['INPUT', 'TEXTAREA'].includes((e.target as HTMLElement).tagName)\n ) {\n return;\n }\n if (SCROLLABLE_KEY_CODES.includes(e.which)) {\n e.preventDefault();\n }\n};\n\nexport function enableScroll(el: Element) {\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (!_el.__ps_ctx__) return;\n\n const { options } = _el.__ps_ctx__;\n\n _el.removeEventListener('wheel', handleWheel, eventListenerOptions);\n _el.removeEventListener('scroll', handleScroll, eventListenerOptions);\n _el.removeEventListener('keydown', handleKeydown);\n\n if (options.hideScrollbar) {\n _el.style.overflow = _el.__ps_ctx__.overflowOrigin as string;\n }\n delete (_el as any).__ps_ctx__;\n}\n\nexport function disableScroll(\n el: Element,\n opts: Partial<PreventScrollOptions> = {},\n) {\n const { hideScrollbar = false } = opts;\n\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (_el.__ps_ctx__) return;\n\n const options = {\n hideScrollbar,\n };\n\n _el.__ps_ctx__ = {\n options,\n el: _el,\n overflowOrigin: _el.style.overflow,\n lockPosition: {\n x: _el.scrollLeft || (_el as any).scrollX,\n y: _el.scrollTop || (_el as any).scrollY,\n },\n };\n\n if (options.hideScrollbar) {\n _el.style.overflow = 'hidden';\n }\n\n _el.addEventListener('wheel', handleWheel, eventListenerOptions);\n _el.addEventListener('scroll', handleScroll, eventListenerOptions);\n _el.addEventListener('keydown', handleKeydown);\n}\n","import { EasingName } from './easings';\n\n/**\n * ã¹ã¯ããŒã«ç³»ã¡ãœããã®åºæ¬ãªãã·ã§ã³èšå®ã§ãã\n */\nexport interface ScrollBaseSettings {\n /**\n * ã¢ãã¡ãŒã·ã§ã³ã®ç·åæéãmsåäœã§æå®ããŸãã\n */\n duration: number;\n\n /**\n * ã¢ãã¡ãŒã·ã§ã³ã®ã€ãŒãžã³ã°ãæå®ããŸãã\n * {@link EasingName}\n */\n easing: EasingName;\n\n /**\n * ã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«ããäžæå¯èœããbooleanå€ã§ç€ºããŸãã\n */\n cancelable: boolean;\n}\n\n/**\n * Scrollerã§å©çšããã¹ã¯ããŒã«ç³»ã¡ãœããã®ãªãã·ã§ã³èšå®ã§ãã\n */\nexport interface ScrollerScrollSettings extends ScrollBaseSettings {\n onProgress?: ScrollCallback;\n onCancel?: ScrollCallback;\n onDone?: ScrollCallback;\n}\n\nexport interface ScrollSettings extends ScrollerScrollSettings {\n container: string | Element;\n}\n\nexport type ScrollerScrollOptions = Partial<ScrollerScrollSettings>;\nexport type ScrollOptions = Partial<ScrollSettings>;\n\n/**\n * ã¹ã¯ããŒã«é¢é£ã¡ãœããã«ããã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ããã£ã³ã»ã«ããã¡ãœããã§ãã<br>\n * ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³èµ·å ã®äžæã®å ŽåãEventãªããžã§ã¯ããæž¡ãããŸãã\n */\nexport type ScrollCanceller = (\n event?: Event | null,\n checkCancelable?: boolean,\n) => void;\n\n/**\n * ã¹ã¯ããŒã«é¢é£ã¡ãœããã®è¿åŽå€ãšãªãã€ã³ã¿ãŒãã§ãŒã¹ã§ãã\n */\nexport interface ScrollResult {\n /**\n * ã¹ã¯ããŒã«ããã£ã³ã»ã«ããã¡ãœããã§ãã\n */\n cancel: ScrollCanceller;\n\n /**\n * ã¹ã¯ããŒã«ã®å®äºããã£ã³ã»ã«ãäžæãåããçµäºãæ€ç¥ããPromiseã€ã³ã¹ã¿ã³ã¹ã§ãã\n */\n promise: Promise<void>; // resolve when done or cancel\n\n /**\n * ã¹ã¯ããŒã«éå§äœçœ®ããå®äºäœçœ®ãŸã§ã®æ³å®pxæ°ãxãy軞å
±ã«è¿åŽããŸãã<br>\n * ã¹ã¯ããŒã«ãéäžã§ãã£ã³ã»ã«ãããå Žåã¯ãã®pxãå ç®ãããŠããªãäºããããŸãã\n */\n plans: { x: number; y: number };\n}\n\n/**\n * ã¹ã¯ããŒã«é¢é£ã®åçš®ã¡ãœããã«ãããŠãã³ãŒã«ããã¯ã¡ãœããã«æž¡ãããã€ã³ã¿ãŒãã§ãŒã¹ã§ãã\n */\nexport interface ScrollCallbackValues {\n /**\n * ã¹ã¯ããŒã«äžã®ã³ã³ããèŠçŽ ã§ãã\n */\n container: Element;\n\n /**\n * ã¹ã¯ããŒã«ã®é²æã0ã1ã§ç€ºããŸãã\n */\n progress: number;\n\n /**\n * ã¹ã¯ããŒã«ãäžæãããŠããå Žåtrueã瀺ããŸãã\n */\n aborted: boolean;\n\n /**\n * ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«ããã¹ã¯ããŒã«ãäžæãããŠããå Žåããã®Eventãªããžã§ã¯ããèšå®ãããŸãã\n */\n abortEventSource: Event | null;\n}\n\nexport type ScrollCallback = (\n scrollToCallbackValues: ScrollCallbackValues,\n) => any;\n\n/**\n * ã¹ã¯ããŒã«å€ãx軞ãy軞ã§ç€ºããŸãã\n */\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const defaultBaseSettings: ScrollBaseSettings = {\n duration: 500,\n easing: 'ease',\n cancelable: true,\n};\n\nexport const defaultSettings: ScrollSettings = {\n get container(): Element {\n return document.scrollingElement as Element;\n },\n ...defaultBaseSettings,\n};\n","const easings = {\n ease: [0.25, 0.1, 0.25, 1.0] as EasingValues,\n linear: [0.0, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-in': [0.42, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-out': [0.0, 0.0, 0.58, 1.0] as EasingValues,\n 'ease-in-out': [0.42, 0.0, 0.58, 1.0] as EasingValues,\n};\nexport type EasingName = keyof typeof easings;\nexport type EasingValues = [number, number, number, number];\nexport default easings;\n","import { logger } from '../logger';\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.tagName.toLowerCase() === 'body';\n}\n\nexport function getContainerDimension(el: Element) {\n if (isBodyElement(el)) {\n const documentElement = <HTMLElement>document.documentElement;\n return {\n // width: window.innerWidth,\n // height: window.innerHeight,\n width: documentElement.clientWidth,\n height: documentElement.clientWidth,\n };\n }\n return {\n width: el.clientWidth,\n height: el.clientHeight,\n };\n}\n\nexport function $(selectorOrElement: string | Element): HTMLElement | null {\n if (typeof selectorOrElement !== 'string')\n return selectorOrElement as HTMLElement;\n return document.querySelector(selectorOrElement);\n}\n\nexport function cumulativeOffset(element: Element) {\n let top = 0;\n let left = 0;\n let el: HTMLElement | null = element as HTMLElement;\n\n while (el) {\n top += el.offsetTop || 0;\n left += el.offsetLeft || 0;\n el = el.offsetParent as HTMLElement;\n }\n\n return {\n top,\n left,\n };\n}\n\nexport type HTMLElementEventMapKey =\n | keyof HTMLElementEventMap\n | 'DOMMouseScroll'\n | 'mousewheel';\n\nexport function on(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n opts = { passive: false },\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.addEventListener(events[i], handler, opts);\n }\n}\n\nexport function off(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.removeEventListener(events[i], handler);\n }\n}\n\nexport function warn(message: string): void {\n logger.warn(message);\n}\n\nexport function error(message: string): Error {\n return new Error(`[scroll] ${message}`);\n}\n","import BezierEasing, { EasingFunction } from 'bezier-easing';\nimport { removeUndef } from '@fastkit/helpers';\nimport easings, { EasingValues } from './easings';\nimport {\n ScrollResult,\n ScrollCallbackValues,\n ScrollOptions,\n defaultSettings,\n} from './schemes';\nimport {\n $,\n on,\n off,\n getContainerDimension,\n HTMLElementEventMapKey,\n error,\n} from './util';\nimport { PreventScrollElement } from '../prevent-scroll';\n\ninterface ComputedValues {\n $container: HTMLElement;\n initialX: number;\n initialY: number;\n targetX: number;\n targetY: number;\n}\n\nconst abortEvents: HTMLElementEventMapKey[] = [\n 'mousedown',\n 'wheel',\n 'DOMMouseScroll',\n 'mousewheel',\n 'keyup',\n 'touchmove',\n];\n\nexport function scroll(\n diffX: number,\n diffY: number,\n // eslint-disable-next-line default-param-last\n options: ScrollOptions = {},\n _computedValues?: ComputedValues,\n): ScrollResult {\n let $container: HTMLElement;\n let initialX: number;\n let initialY: number;\n let targetX: number;\n let targetY: number;\n\n const _options = { ...defaultSettings, ...removeUndef(options) };\n const {\n container,\n duration,\n easing,\n cancelable,\n onProgress,\n onCancel,\n onDone,\n } = _options;\n\n const x = diffX !== 0;\n const y = diffY !== 0;\n\n if (_computedValues) {\n $container = _computedValues.$container;\n initialX = _computedValues.initialX;\n initialY = _computedValues.initialY;\n targetX = _computedValues.targetX;\n targetY = _computedValues.targetY;\n } else {\n $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n initialX = $container.scrollLeft;\n initialY = $container.scrollTop;\n targetX = initialX + diffX;\n targetY = initialY + diffY;\n }\n\n // compute overflow and adjust values\n const { scrollWidth, scrollHeight } = $container;\n const { width, height } = getContainerDimension($container);\n const overflowX = targetX + width - scrollWidth;\n const overflowY = targetY + height - scrollHeight;\n if (overflowX > 0) {\n diffX -= overflowX;\n targetX -= overflowX;\n }\n if (overflowY > 0) {\n diffY -= overflowY;\n targetY -= overflowY;\n }\n\n //\n // Setup Temporary values\n //\n // eslint-disable-next-line @typescript-eslint/ban-types\n let doneResolver: Function;\n let timeStart = 0;\n let timeElapsed: number;\n\n const callbackValues: ScrollCallbackValues = {\n container: $container,\n progress: 0,\n aborted: false,\n abortEventSource: null,\n };\n\n const result: ScrollResult = {\n cancel: canceller,\n promise: new Promise((resolve) => {\n doneResolver = resolve;\n }),\n plans: {\n x: diffX,\n y: diffY,\n },\n };\n\n //\n // processes\n //\n if (\n (diffY === 0 && diffX === 0) ||\n !!($container as PreventScrollElement).__ps_ctx__\n )\n return initialAbort();\n\n // setup easings\n let easingValues: EasingValues;\n if (!easing) {\n easingValues = easings.ease;\n } else if (typeof easing === 'string') {\n easingValues = easings[_options.easing];\n } else {\n easingValues = easing;\n }\n const easingFn: EasingFunction = BezierEasing.apply(\n BezierEasing,\n easingValues,\n );\n\n on($container, abortEvents, abortFn, { passive: true });\n window.requestAnimationFrame(step);\n return result;\n\n //\n // inner methods\n //\n function doneResolve(): void {\n doneResolver();\n }\n\n function canceller(e: Event | null = null, checkCancelable = false) {\n if (checkCancelable && !cancelable) return;\n off($container, abortEvents, abortFn);\n callbackValues.abortEventSource = e;\n callbackValues.aborted = true;\n onCancel && onCancel(callbackValues);\n }\n\n function abortFn(e: Event) {\n canceller(e, true);\n }\n\n function initialAbort(e: Event | null = null) {\n canceller(e);\n doneResolve();\n return result;\n }\n\n function step(timestamp: number): void {\n if (callbackValues.aborted) return done();\n if (!timeStart) timeStart = timestamp;\n\n timeElapsed = timestamp - timeStart;\n\n let progress = Math.min(timeElapsed / duration, 1);\n progress = easingFn(progress);\n callbackValues.progress = progress;\n\n topLeft(initialY + diffY * progress, initialX + diffX * progress);\n onProgress && onProgress(callbackValues);\n\n timeElapsed < duration ? window.requestAnimationFrame(step) : done();\n }\n\n function topLeft(top: number, left: number) {\n if (y) $container.scrollTop = top;\n if (x) $container.scrollLeft = left;\n }\n\n function done() {\n if (!callbackValues.aborted) topLeft(targetY, targetX);\n timeStart = 0;\n off($container, abortEvents, abortFn);\n callbackValues.progress = 1;\n doneResolve();\n if (!callbackValues.aborted && onDone) onDone(callbackValues);\n }\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult } from './schemes';\n\n/**\n * æå®ã®å·®åã ãã³ã³ãããã¹ã¯ããŒã«ããŸãã\n * @param diffX - 暪軞ã®ç§»åéïŒpxïŒã§ããããã©ã«ãã¯0ã§ãã\n * @param diffY - 瞊軞ã®ç§»åéïŒpxïŒã§ããããã©ã«ãã¯0ã§ãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollBy(\n diffX: number,\n diffY: number,\n options?: ScrollOptions,\n): ScrollResult {\n return scroll(diffX, diffY, options);\n}\n","import { scroll } from './scroll-by-internal';\nimport {\n ScrollOptions,\n defaultSettings,\n ScrollPosition,\n ScrollResult,\n} from './schemes';\nimport { $, error } from './util';\n\n/**\n * ä»»æã®äœçœ®ïŒpxïŒãžã³ã³ãããã¹ã¯ããŒã«ããŸãã\n * @param scrollPosition - ã¹ã¯ããŒã«å
ãæå®ããŸããx, y å
±ã«ãªãã·ã§ãã«ãªãã§ããæªæå®ã®è»žã¯çŸåšã®ã¹ã¯ããŒã«å€ã®ãŸãŸä¿æãããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollTo(\n scrollPosition: Partial<ScrollPosition>,\n options: ScrollOptions = {},\n): ScrollResult {\n let { x, y } = scrollPosition;\n const container = options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n if (x === undefined) x = initialX;\n if (y === undefined) y = initialY;\n const diffX = x - initialX;\n const diffY = y - initialY;\n\n return scroll(diffX, diffY, options, {\n $container,\n initialX,\n initialY,\n targetX: x,\n targetY: y,\n });\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult, defaultSettings } from './schemes';\nimport { $, cumulativeOffset, error } from './util';\n\n/**\n * ã¹ã¯ããŒã«å
ã®èŠçŽ ãElement or CSSã¯ãšãªã¹ããªã³ã°ã§ç€ºããŸãã\n */\nexport type ScrollToElementTarget = string | Element;\n\n/**\n * èŠçŽ ãžã¹ã¯ããŒã«ããéã®ãªãã·ã§ã³èšå®ã§ãã\n */\nexport interface ScrollToElementSettings {\n /**\n * èŠçŽ ãžã¹ã¯ããŒã«ããéããã®ã¹ã¯ããŒã«å
ããããéã«èšå®ããŸãã<br>\n * x, y åå¥ã«èšå®ãå¯èœã§ãããã·ã³ã°ã«ã®numberã®ã¿ãæå®ããå Žåãx, y ã®ããããã®ãªãã·ã§ã³ãæå¹ãªå Žåã«ã®ã¿ãã®è»žã«èšå®ãããŸãã\n */\n offset: number | { x?: number; y?: number };\n\n /**\n * 暪ã¹ã¯ããŒã«ã®å¯åŠã瀺ããŸãã\n */\n x: boolean;\n\n /**\n * 瞊ã¹ã¯ããŒã«ã®å¯åŠã瀺ããŸãã\n */\n y: boolean;\n}\n\n/**\n * èŠçŽ ã¹ã¯ããŒã«å©çšäºã®ããã©ã«ãèšå®ã§ãã\n * {@link ScrollToElementSettings}\n */\nexport const scrollToElementSettingsDefaults: ScrollToElementSettings = {\n offset: 0,\n x: false,\n y: true,\n};\n\n/**\n * èŠçŽ ãžã¹ã¯ããŒã«ãããéã®ãªãã·ã§ã³èšå®ã§ãã\n */\nexport type ScrollToElementOptions = Partial<\n ScrollOptions & ScrollToElementSettings\n>;\n\n/**\n * ä»»æã®èŠçŽ ã®äœçœ®ãžã¹ã¯ããŒã«ããŸãã\n * @param target - ã¹ã¯ããŒã«å
ã®èŠçŽ \n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToElement(\n target: ScrollToElementTarget,\n options: ScrollToElementOptions = {},\n): ScrollResult {\n //\n // Setup Options\n //\n\n const _options = { ...scrollToElementSettingsDefaults, ...options };\n\n const { x, y } = _options;\n\n const offsetSource = _options.offset;\n\n const offset =\n typeof offsetSource === 'number'\n ? { x: offsetSource, y: offsetSource }\n : offsetSource;\n\n //\n // Setup Elements\n //\n\n const $target = $(target) as HTMLElement;\n if (!$target) throw error(`missing element ${target}`);\n\n const container = _options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n const cumulativeOffsetContainer = cumulativeOffset($container);\n const cumulativeOffsetTarget = cumulativeOffset($target);\n\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n\n const targetY =\n cumulativeOffsetTarget.top -\n cumulativeOffsetContainer.top +\n (offset.y || 0);\n\n const targetX =\n cumulativeOffsetTarget.left -\n cumulativeOffsetContainer.left +\n (offset.x || 0);\n\n const diffX = x ? targetX - initialX : 0;\n const diffY = y ? targetY - initialY : 0;\n\n return scroll(diffX, diffY, _options, {\n $container,\n initialX,\n initialY,\n targetX,\n targetY,\n });\n}\n","import {\n ScrollOptions,\n ScrollResult,\n defaultSettings,\n ScrollPosition,\n} from './schemes';\nimport { $, error } from './util';\nimport { scrollTo } from './scroll-to';\n\n/**\n * y軞ã®äž¡ç«¯ã®èŸºã瀺ããŸãã\n */\nexport type ScrollYSide = 'top' | 'bottom';\n\n/**\n * x軞ã®äž¡ç«¯ã®èŸºã瀺ããŸãã\n */\nexport type ScrollXSide = 'left' | 'right';\n\n/**\n * ã³ã³ããã®4蟺ã瀺ããŸãã\n */\nexport type ScrollSide = ScrollYSide | ScrollXSide;\n\n/**\n * ã³ã³ããã®èŸºãžã¹ã¯ããŒã«ãããéã®ã¿ãŒã²ããæå®ã®ãã¿ãŒã³ã§ãã\n */\nexport type ScrollToSideTargets =\n | ScrollSide\n | [ScrollSide]\n | [ScrollYSide, ScrollXSide]\n | [ScrollXSide, ScrollYSide];\n\n/**\n * ã³ã³ãããããããã®èŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param targets - 蟺ãæå®ããŸããã·ã³ã°ã«ã®æååãåã³é
åã«å¯Ÿå¿ããŠããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToSide(\n targets: ScrollToSideTargets,\n options?: ScrollOptions,\n): ScrollResult {\n const sides: ScrollSide[] = typeof targets === 'string' ? [targets] : targets;\n const position: Partial<ScrollPosition> = {};\n\n const hasRight = sides.includes('right');\n const hasBottom = sides.includes('bottom');\n\n if (sides.includes('top')) {\n position.y = 0;\n }\n\n if (sides.includes('left')) {\n position.x = 0;\n }\n\n if (hasRight || hasBottom) {\n const container =\n (options && options.container) || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n if (hasRight) position.x = $container.scrollWidth;\n if (hasBottom) position.y = $container.scrollHeight;\n }\n\n return scrollTo(position, options);\n}\n\n/**\n * ã³ã³ãããäžèŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToTop(options?: ScrollOptions) {\n return scrollToSide('top', options);\n}\n\n/**\n * ã³ã³ãããå³èŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToRight(options?: ScrollOptions) {\n return scrollToSide('right', options);\n}\n\n/**\n * ã³ã³ãããäžèŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToBottom(options?: ScrollOptions) {\n return scrollToSide('bottom', options);\n}\n\n/**\n * ã³ã³ããã巊蟺ãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToLeft(options?: ScrollOptions) {\n return scrollToSide('left', options);\n}\n\n/**\n * ã³ã³ãããå·Šäžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToLeftTop(options?: ScrollOptions) {\n return scrollToSide(['left', 'top'], options);\n}\n\n/**\n * ã³ã³ãããå·Šäžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToLeftBottom(options?: ScrollOptions) {\n return scrollToSide(['left', 'bottom'], options);\n}\n\n/**\n * ã³ã³ãããå³äžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToRightTop(options?: ScrollOptions) {\n return scrollToSide(['right', 'top'], options);\n}\n\n/**\n * ã³ã³ãããå³äžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToRightBottom(options?: ScrollOptions) {\n return scrollToSide(['right', 'bottom'], options);\n}\n","import { EV } from '@fastkit/ev';\nimport {\n visibilityManager,\n VisibilityStateListener,\n} from '@fastkit/visibility';\nimport { IN_WINDOW } from '@fastkit/helpers';\nimport { isDocumentElement, isBodyElement } from './util';\nimport { logger } from './logger';\n\nimport { enableScroll, disableScroll } from './prevent-scroll';\n\nimport {\n ScrollPosition,\n ScrollOptions,\n ScrollBaseSettings,\n ScrollToElementTarget,\n ScrollResult,\n ScrollerScrollOptions,\n ScrollToElementSettings,\n scrollToElementSettingsDefaults as _scrollToElementSettingsDefaults,\n scrollBy,\n scrollTo,\n scrollToElement,\n scrollToSide,\n scrollToTop,\n scrollToRight,\n scrollToBottom,\n scrollToLeft,\n scrollToLeftTop,\n scrollToLeftBottom,\n scrollToRightTop,\n scrollToRightBottom,\n ScrollToSideTargets,\n ScrollToElementOptions,\n} from './scroll';\n\nimport { defaultBaseSettings } from './scroll/schemes';\n\nexport * from './prevent-scroll';\n\nexport * from './scroll';\n\nexport type ScrollToElementAdditionalOffset =\n | number\n | { x?: number; y?: number }\n | ((scroller: Scroller) => number | { x?: number; y?: number } | undefined);\n\n/**\n * [[Scroller]]ãä»»æã®ElementãŸã§ã¹ã¯ããŒã«ãããéã®ãªãã·ã§ã³ã§ãã\n * 詳现㯠[[ScrollerScrollOptions]] åã³ã [[ScrollToElementSettings]] ãåç
§ããŠãã ããã\n */\nexport type ScrollerScrollToElementOptions = Partial<\n ScrollerScrollOptions & ScrollToElementSettings\n>;\n\n// Scroller ã¯èšå®ãããã³ã³ããã¹ãèŠçŽ ã«å¿ããŠscrollãsizeæ€ç¥ã®ãªã¹ãã\n// window ã èªèº«ã®elementã«åãæ¿ããŸã\ntype ScrollerEventTarget = Window | Element;\n\n/**\n * Scrollerã«çžŠã¹ã¯ããŒã«ãçºçããéã®æ¹åã瀺ãTypeã§ãã\n */\nexport type ScrollYDirection = 'top' | 'bottom';\n\n/**\n * Scrollerã«æšªã¹ã¯ããŒã«ãçºçããéã®æ¹åã瀺ãTypeã§ãã\n */\nexport type ScrollXDirection = 'left' | 'right';\n\n/**\n * Scrollerã«ã¹ã¯ããŒã«ãçºçããéã®æ¹åã瀺ãTypeã§ãã\n */\nexport type ScrollDirection = ScrollYDirection | ScrollXDirection;\n\n/**\n * ã¹ã¯ããŒã«ã®è»žã瀺ããŸãã\n * xã¯æ°Žå¹³ã\n * yã¯åçŽããããã瀺ããŸã\n */\nexport type ScrollAxis = 'x' | 'y';\n\nexport interface ScrollSizeObserverSetting {\n interval: number;\n width: boolean;\n height: boolean;\n}\n\n/**\n * Scrollerã®åºæ¬ã»ããã£ã³ã°ã§ãã\n * åã
ã®ãã£ãŒã«ãã®è©³çްã¯[[Scroller]]ã®ååããããã£ãåç
§ããŠãã ããã\n */\nexport interface ScrollerSetting {\n el: Element | string | null;\n scrollingJudgeInterval: number;\n baseAxis: ScrollAxis;\n scrollSizeObserver: Partial<ScrollSizeObserverSetting>;\n}\n\n/**\n * Elementã®scrollã€ãã³ããæ€ç¥ããéã«ãéç¥ããæ
å ±ã§ã\n * çŸåšã®ã¹ã¯ããŒã«ããžã·ã§ã³ããã¹ã¯ããŒã«éå§ïŒorååã®tickïŒããã®ã¹ã¯ããŒã«éãæž¡ãããŸãã\n */\nexport interface ScrollerPayload {\n /**\n * [[Scroller.scrollTop]] ãæž¡ãããŸã\n */\n top: number;\n\n /**\n * [[Scroller.scrollLeft]] ãæž¡ãããŸã\n */\n left: number;\n\n /**\n * [[Scroller.scrollBottom]] ãæž¡ãããŸã\n */\n bottom: number;\n\n /**\n * [[Scroller.scrollRight]] ãæž¡ãããŸã\n */\n right: number;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®è»žãæž¡ãããŸãã\n * æãã¹ã¯ããŒã«ãçºçããéã¯ãxãyã®ãã¡ç§»åéã倧ãããã®ãèªåå€å®ãããŠæž¡ãããŸãã\n * ã©ã¡ããåãç§»åéã§ãã£ãå Žåã¯[[Scroller.baseAxis]]ã®èšå®å€ãæž¡ãããŸãã\n */\n axis: ScrollAxis;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®æ¹åãæž¡ãããŸãã\n * æãã¹ã¯ããŒã«ãçºçããéã¯ãxãyã®ãã¡ç§»åéã倧ãããã®ãèªåå€å®ãããŠæž¡ãããŸãã\n * ã©ã¡ããåãç§»åéã§ãã£ãå Žåã¯[[Scroller.baseAxis]]ã®èšå®å€ãæž¡ãããŸãã\n */\n direction: ScrollDirection;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®æ°Žå¹³æ¹åãæž¡ãããŸãã\n */\n directionX: ScrollXDirection;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®åçŽæ¹åãæž¡ãããŸãã\n */\n directionY: ScrollYDirection;\n\n // tick amount at element.on('scroll') detect\n\n /**\n * [[Scroller.on]]('scroll')æã®ååããã®æ°Žå¹³ç§»åéãæž¡ãããŸãã\n */\n tickedX: number;\n\n /**\n * [[Scroller.on]]('scroll')æã®ååããã®åçŽç§»åéãæž¡ãããŸãã\n */\n tickedY: number;\n\n /**\n * [[Scroller.on]]('scrollStart')æããã®åèšæ°Žå¹³ç§»åéãæž¡ãããŸãã\n */\n totalX: number;\n\n /**\n * [[Scroller.on]]('scrollStart')æããã®åèšåçŽç§»åéãæž¡ãããŸãã\n */\n totalY: number;\n}\n\n/**\n * Scrollerã¯èšå®ãããElementã®ã¹ã¯ããŒã«éå§ãtickãçµäºãæ€ç¥ã\n * ã€ãã³ããéç¥ããŸãã\n * ãããã®ã€ãã³ãã賌èªããäºã§ã¹ã¯ããŒã«éãç§»åæ¹åãæ€ç¥å¯èœã§ãã\n */\nexport interface ScrollerScrollEventMap {\n /**\n * ã¹ã¯ããŒã«ã®éå§æã«çºçããŸãã\n */\n scrollStart: ScrollerPayload;\n\n /**\n * æ¯ã¹ã¯ããŒã«æ€ç¥æã«çºçããŸãã\n */\n scroll: ScrollerPayload;\n\n /**\n * ã¹ã¯ããŒã«ã®çµäºæã«çºçããŸãã\n */\n scrollEnd: ScrollerPayload;\n}\n\n/**\n * Scrollerã«çºçããã€ãã³ãã®å
šãŠã§ãã\n */\nexport interface ScrollerEventMap extends ScrollerScrollEventMap {\n /**\n * Scrollerãå©çšå¯èœã«ãªã£ãæïŒElementãèšå®ãããŠåæåãå®äºããïŒã«çºçããŸãã\n */\n ready: void;\n\n /**\n * [[Scroller.state]]ã倿Žãããæã«çºçããŸãã\n */\n changeState: ScrollerState;\n\n /**\n * [[Scroller.el]]ã®ãµã€ãºå€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n resize: { width: number; height: number };\n\n /**\n * [[Scroller.lastAxis]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeAxis: ScrollAxis;\n\n /**\n * [[Scroller.lastDirection]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeLastDirection: ScrollDirection;\n\n /**\n * [[Scroller.lastYDirection]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeLastYDirection: ScrollYDirection;\n\n /**\n * [[Scroller.lastXDirection]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeLastXDirection: ScrollXDirection;\n}\n\n/**\n * Scrollerã®ç¶æ
ã瀺ããŸãã\n */\n// eslint-disable-next-line no-shadow\nexport enum ScrollerState {\n /**\n * ScrollerãåæåãããŠããªãïŒElementãèšå®ãããŠããªãïŒç¶æ
ã瀺ããŸãã\n */\n Pending = 'pending',\n\n /**\n * ScrollerãåæåãããŠãããã[[Scroller.el]]ã®ãªãµã€ãºãã¹ã¯ããŒã«ã®ã€ãã³ãç£èŠãåäœããŠããªãç¶æ
ã瀺ããŸãã\n */\n Ready = 'ready',\n\n /**\n * ScrollerãåæåãããŠããŠã[[Scroller.el]]ã®ãªãµã€ãºãã¹ã¯ããŒã«ã®ã€ãã³ãç£èŠãåäœããŠããç¶æ
ã瀺ããŸãã\n */\n Running = 'running',\n\n /**\n * [[Scroller.destroy]]ãå®è¡ãããScrollerãå©çšäžå¯ã§ããç¶æ
ã瀺ããŸãã\n */\n Destroyed = 'destroyed',\n}\n\n/**\n * Scrollerã¯ã©ã¹ã®ç¶æ
ãç£èŠïŒåæãããªããžã§ã¯ãã\n * ä¿æãã¹ãããããã£äžèЧã§ãã\n * åã
ã®ããããã£åã¯ãååã®Scrollerã¯ã©ã¹ã®ããããã£ãåç
§ããŠäžãã\n */\nexport interface ScrollerObserver {\n state: ScrollerState;\n isPending: boolean;\n isReady: boolean;\n isRunning: boolean;\n isDestroyed: boolean;\n scrollEnabled: boolean;\n containerWidth: number;\n containerHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n scrollableX: boolean;\n scrollableY: boolean;\n scrollTop: number;\n scrollLeft: number;\n scrollRight: number;\n scrollBottom: number;\n lastAxis: ScrollAxis;\n lastDirection: ScrollDirection;\n lastYDirection: ScrollYDirection;\n lastXDirection: ScrollXDirection;\n nowScrolling: boolean;\n}\n\n/**\n * Scrollerã¯ã©ã¹ã®ç¶æ
ãç£èŠïŒåæãããªããžã§ã¯ãã\n * ä¿æãã¹ãããããã£äžã®ããŒèЧã§ãã\n */\nexport type ScrollerObservableKeys = keyof ScrollerObserver;\nconst scrollerObservableKeys: ScrollerObservableKeys[] = [\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n 'scrollEnabled',\n 'containerWidth',\n 'containerHeight',\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n 'scrollTop',\n 'scrollLeft',\n 'scrollRight',\n 'scrollBottom',\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n 'nowScrolling',\n];\n\n/**\n * ã¹ã¯ããŒã«ã忢ãããããã®ãœãŒã¹ãªããžã§ã¯ã\n */\nexport type ScrollStopper = number | string | Record<string, unknown> | symbol;\n\n/**\n * ä»»æã®ElementïŒor HTML DocumentïŒã®ã¹ã¯ããŒã«ããµã€ãºå€æŽãç£èŠãããã®æ
å ±ãéç¥ããã¯ã©ã¹ã§ãã<br>\n * <a href=\"https://dadajam4.github.io/dadajam4/ev/classes/_ev_.ev.html\" target=\"_blank\">EV</a>ãç¶æ¿ããŠãããã€ãã³ãã®è³Œèª[[Scroller.on]]çã®ã€ã³ã¿ãŒãã§ãŒã¹ãå©çšãããã\n * [[Scroller.observe]]ã¡ãœãããå©çšããŸãã<br>\n * [[Scroller.on]]ã[[Scroller.once]]ã§è³Œèªå¯èœãªã€ãã³ãã«ã€ããŠã¯[[ScrollerEventMap]]ãåç
§ããŠãã ããã\n */\nexport class Scroller extends EV<ScrollerEventMap> {\n /**\n * Scrollerã¯ã©ã¹ã®ç¶æ
ãç£èŠïŒåæãããªããžã§ã¯ãã\n * ä¿æãã¹ãããããã£äžã®ããŒã®é
åã§ãã\n */\n static readonly scrollerObservableKeys = scrollerObservableKeys;\n\n /**\n * Scrollerã®ç¶æ
ã瀺ãenumå€ã§ãã\n * {@link ScrollerState}\n */\n static readonly States = ScrollerState;\n\n /**\n * ã¹ã¯ããŒã«ãæ€ç¥ããŠãããç§»åããªããªã£ãéã«ãäœmsåŸã«ã¹ã¯ããŒã«çµäºãšå€å®ãããã®ã€ã³ã¿ãŒãã«å€ã瀺ããŸãã\n * ããã©ã«ãã¯500ã§ãã\n */\n scrollingJudgeInterval = 500;\n\n /**\n * çžŠãæšªã®ã©ã¡ãã®ã¹ã¯ããŒã«ãåºæºãšãããã瀺ããŸãã\n * ããã©ã«ãã¯yã§ãã<br>\n * ãã®èšå®ã¯[[Scroller.toElement]]ã®ããã©ã«ãå€ã«ã圱é¿ããŸãã\n */\n baseAxis: ScrollAxis = 'y';\n\n /**\n * ã¹ã¯ããŒã«ç³»ã¡ãœãã[[Scroller.to]]çãå©çšããéã®ããã©ã«ãã®èšå®ã瀺ããŸãã\n */\n scrollSettingsDefaults: ScrollBaseSettings = { ...defaultBaseSettings };\n\n /**\n * [[Scroller.toElement]]ã®ããã©ã«ããªãã·ã§ã³ã®èšå®ã瀺ããŸãã\n */\n scrollToElementSettingsDefaults: ScrollerScrollToElementOptions = {\n ..._scrollToElementSettingsDefaults,\n };\n\n scrollSizeObserver?: ScrollSizeObserverSetting;\n\n /**\n * èšå®ãããElementèŠçŽ ã§ãã\n * åæåãå®äºããŠããªãæã«ã¯æ¬getterã¯undefinedãè¿åŽããäºã«æ³šæããŠãã ããã\n */\n get el() {\n return this._el;\n }\n\n /**\n * çŸåšã®ç¶æ
ã§ãã<br>\n * {@link ScrollerState}\n */\n get state(): ScrollerState {\n return this._state;\n }\n\n /**\n * æªåæåã§ããå Žåtrueã瀺ããŸãã\n */\n get isPending(): boolean {\n return this._state === ScrollerState.Pending;\n }\n\n /**\n * åæåæžã¿ïŒåæ¢ç¶æ
ã§ããå Žåtrueã瀺ããŸãã\n */\n get isReady(): boolean {\n return this._state === ScrollerState.Ready;\n }\n\n /**\n * åæåæžã¿ïŒåäœäžã§ããå Žåtrueã瀺ããŸãã\n */\n get isRunning(): boolean {\n return this._state === ScrollerState.Running;\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ãç Žæ£æžã¿ã§ããå Žåtrueã瀺ããŸãã\n */\n get isDestroyed(): boolean {\n return this._state === ScrollerState.Destroyed;\n }\n\n /**\n * ã¹ã¯ããŒã«ã®æå¹ç¶æ
ãååŸããŸã\n */\n get scrollEnabled(): boolean {\n return this._scrollStoppers.length === 0;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ ã®å¹
ã瀺ããŸãã\n */\n get containerWidth(): number {\n return this._containerWidth;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ ã®é«ãã瀺ããŸãã\n */\n get containerHeight(): number {\n return this._containerHeight;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ å
ã®ã³ã³ãã³ãã®å¹
ã瀺ããŸãã\n */\n get scrollWidth(): number {\n return this._scrollWidth;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ å
ã®ã³ã³ãã³ãã®é«ãã瀺ããŸãã\n */\n get scrollHeight(): number {\n return this._scrollHeight;\n }\n\n /**\n * x軞ã«ã¹ã¯ããŒã«å¯èœãªå Žåtrueã瀺ããŸã\n */\n get scrollableX(): boolean {\n return this._scrollWidth > this._containerWidth;\n }\n\n /**\n * y軞ã«ã¹ã¯ããŒã«å¯èœãªå Žåtrueã瀺ããŸã\n */\n get scrollableY(): boolean {\n return this._scrollHeight > this._containerHeight;\n }\n\n /**\n * çŸåšã®äžèŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollTop(): number {\n return this._scrollTop;\n }\n\n set scrollTop(scrollTop: number) {\n if (!this.el) return;\n this.el.scrollTop = scrollTop;\n }\n\n /**\n * çŸåšã®å³èŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollRight(): number {\n return this._scrollRight;\n }\n\n set scrollRight(scrollRight: number) {\n if (!this.el) return;\n this.el.scrollLeft = this._scrollWidth - this._containerWidth - scrollRight;\n }\n\n /**\n * çŸåšã®äžèŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollBottom(): number {\n return this._scrollBottom;\n }\n\n set scrollBottom(scrollBottom: number) {\n if (!this.el) return;\n this.el.scrollTop =\n this._scrollHeight - this._containerHeight - scrollBottom;\n }\n\n /**\n * çŸåšã®å·ŠèŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollLeft(): number {\n return this._scrollLeft;\n }\n\n set scrollLeft(scrollLeft: number) {\n if (!this.el) return;\n this.el.scrollLeft = scrollLeft;\n }\n\n /**\n * çŸåšã¹ã¯ããŒã«äžã§ããå Žåtrueã瀺ããŸãã\n */\n get nowScrolling(): boolean {\n return this._nowScrolling;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®è»žã瀺ããŸãã\n */\n get lastAxis(): ScrollAxis {\n return this._lastAxis;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®æ¹åã瀺ããŸãã\n */\n get lastDirection(): ScrollDirection {\n return this._lastDirection;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®åçŽæ¹åã瀺ããŸãã\n */\n get lastYDirection(): ScrollYDirection {\n return this._lastYDirection;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®æ°Žå¹³æ¹åã瀺ããŸãã\n */\n get lastXDirection(): ScrollXDirection {\n return this._lastXDirection;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã«ããéç¥ããæ
å ±ã瀺ããŸãã\n */\n get lastPayload(): ScrollerPayload {\n return {\n top: this._scrollTop,\n left: this._scrollLeft,\n bottom: this._scrollBottom,\n right: this._scrollRight,\n axis: this._lastAxis,\n direction: this._lastDirection,\n directionX: this._lastXDirection,\n directionY: this._lastYDirection,\n tickedX: this._tickedX,\n tickedY: this._tickedY,\n totalX: this._lastTotalX,\n totalY: this._lastTotalY,\n };\n }\n\n private _el!: Element | null;\n\n private _eventTarget!: ScrollerEventTarget;\n\n private _isDocumentElement = false;\n\n private _isBodyElement = false;\n\n private _isRootElement = false;\n\n private _state: ScrollerState = ScrollerState.Pending;\n\n private _containerWidth = 0;\n\n private _containerHeight = 0;\n\n private _scrollWidth = 0;\n\n private _scrollHeight = 0;\n\n private _scrollTop = 0;\n\n private _scrollRight = 0;\n\n private _scrollBottom = 0;\n\n private _scrollLeft = 0;\n\n private _lastAxis: ScrollAxis;\n\n private _lastDirection: ScrollDirection;\n\n private _lastYDirection: ScrollYDirection = 'top';\n\n private _lastXDirection: ScrollXDirection = 'left';\n\n private _nowScrolling = false;\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _readyResolvers: Function[] = [];\n\n private _scrollingJudgeTimerId: number | null = null;\n\n private _startX = 0;\n\n private _startY = 0;\n\n private _tickedX = 0;\n\n private _tickedY = 0;\n\n private _lastTotalX = 0;\n\n private _lastTotalY = 0;\n\n private _scrollListener?: EventListener;\n\n private _resizeListener?: EventListener;\n\n private _resizeObserver?: ResizeObserver;\n\n private _scrollToResult: ScrollResult | null = null;\n\n private _observers: ScrollerObserver[] = [];\n\n private _scrollStoppers: ScrollStopper[] = [];\n\n private _scrollSizeObserverPollingId: number | null = null;\n\n private _scrollSizeObserverSuspended = false;\n\n private _visibilityListener: VisibilityStateListener;\n\n /**\n * Scrollerã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã\n * ã³ã³ããã¹ããšãªãElementããã®æç¹ã§æå®ãããåŠãã¯ä»»æã§ãã\n *\n * @param settingOrElementOrQueryString - ä»»æã§ãã{@link ScrollerSetting}ã ElementïŒor cssã¯ãšãªã»ã¬ã¯ã¿æååïŒãçŽæ¥æå®ããŸãããã®æç¹ã§Elementãæå®ããªãå Žåã¯ã[[setElement]]ãå®è¡ãããŸã§ã€ã³ã¹ã¿ã³ã¹ã¯åäœããŸããã\n */\n constructor(\n settingOrElementOrQueryString:\n | Partial<ScrollerSetting>\n | Element\n | string = {},\n ) {\n super();\n\n const convertedSetting: Partial<ScrollerSetting> =\n typeof settingOrElementOrQueryString === 'string' ||\n settingOrElementOrQueryString === null ||\n (IN_WINDOW && settingOrElementOrQueryString instanceof Element)\n ? (settingOrElementOrQueryString = {\n el: <Element | string>settingOrElementOrQueryString,\n })\n : (settingOrElementOrQueryString as Partial<ScrollerSetting>);\n\n if (convertedSetting.scrollingJudgeInterval !== undefined)\n this.scrollingJudgeInterval = convertedSetting.scrollingJudgeInterval;\n\n if (convertedSetting.baseAxis) this.baseAxis = convertedSetting.baseAxis;\n this._lastAxis = this.baseAxis;\n\n const { scrollSizeObserver } = convertedSetting;\n if (scrollSizeObserver) {\n this.scrollSizeObserver = {\n interval: 500,\n width: true,\n height: true,\n ...scrollSizeObserver,\n };\n }\n\n this._visibilityListener = () => {\n if (visibilityManager.isVisible) {\n this.update();\n if (this._scrollSizeObserverSuspended) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n }\n } else {\n this._scrollSizeObserverSuspended =\n this._scrollSizeObserverPollingId !== null;\n this._stopScrollSizeObserver();\n }\n };\n\n this._lastDirection = this._lastAxis === 'y' ? 'top' : 'left';\n\n // for SSR\n if (!IN_WINDOW) return;\n\n // Add Visibility Listener\n visibilityManager.change(this._visibilityListener);\n\n // Skip auto setup when missing scrolling element.\n this.setElement(convertedSetting.el);\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã«Elementãèšå®ããŸããç¹å¥ãªçç±ïŒSSRã®å©çšçïŒã«ããã³ã³ã¹ãã©ã¯ã¿ã§Elementãæå®ã§ããªãå Žåã\n * æ¬ã¡ãœãããå©çšããã©ãŠã¶ã³ã³ããã¹ãé
äžã§æ¬ã¡ãœãããå®è¡ããŠãã ããã\n * @param el - Elementããããã¯CSSã¯ãšãªã»ã¬ã¯ã¿æååãæå®ããŸãã\n */\n setElement(el?: Element | string | null) {\n if (el === null) return;\n if (!IN_WINDOW)\n logger.error('Element can be set only when it is under DOM context.');\n\n this.stop();\n\n let _el: Element | null;\n if (typeof el === 'string') {\n _el = document.querySelector(el);\n } else {\n _el = el || document.scrollingElement;\n }\n if (!_el) {\n const message = 'missing scrolling element';\n logger.error(message, el);\n throw new Error(message);\n }\n\n this._el = _el;\n this._isDocumentElement = isDocumentElement(_el);\n this._isBodyElement = isBodyElement(_el);\n this._isRootElement = this._isDocumentElement || this._isBodyElement;\n this._eventTarget =\n this._isDocumentElement || this._isBodyElement ? window : this._el;\n\n this._setup();\n }\n\n private _scrollToElementAdditionalOffset:\n | ScrollToElementAdditionalOffset\n | undefined;\n\n setScrollToElementAdditionalOffset(\n offset: ScrollToElementAdditionalOffset | undefined,\n ) {\n this._scrollToElementAdditionalOffset = offset;\n }\n\n deleteScrollToElementAdditionalOffset() {\n delete this._scrollToElementAdditionalOffset;\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ãå®è¡å¯èœã«ãªã£ãéã«resolveãããPromiseã€ã³ã¹ã¿ã³ã¹ãè¿åŽããŸãã\n */\n ready(): Promise<void> {\n this._checkDestroyed();\n if (!this.isPending) return Promise.resolve();\n return new Promise((resolve) => this._readyResolvers.push(resolve));\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã®åäœãéå§ããŸããæ¬ã€ã³ã¹ã¿ã³ã¹ã¯Elementãèšå®ããåæåãããéã«èªåã§åäœãéå§ããŸããã\n * [[Scroller.stop]]ã¡ãœãããå©çšãåäœã忢ããåŸã«åéããå Žåã«æ¬ã¡ãœãããå©çšããŸãã\n */\n async start(): Promise<void> {\n this._checkDestroyed();\n if (this.isRunning) return;\n await this.ready();\n this._startListeners();\n this._setState(ScrollerState.Running);\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã®åäœïŒã¹ã¯ããŒã«ããªãµã€ãºã€ãã³ãã®æ€ç¥çïŒã忢ããŸãã\n * äœããã®çç±ã§åäœã忢ããããå Žåã«å©çšããŠãã ããã\n * æ¬ã¡ãœãããå®è¡åŸãã€ã³ã¹ã¿ã³ã¹å
ã®ç¶æ
ã¯ä¿æããããŸãŸã§ãã\n * å®å
šã«ã€ã³ã¹ã¿ã³ã¹ãç Žæ£ããããã«ã¯[[Scroller.destroy]]ãå©çšããŠãã ããã\n */\n stop(): void {\n this._checkDestroyed();\n if (!this.isRunning) return;\n this._stopListeners();\n this._setState(ScrollerState.Ready);\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã®åäœã忢ããå
éšæ
å ±ãå®å
šã«ç Žæ£ããŸãã\n * ããã«äŒŽããã¹ã¯ããŒã«äžã§ãã£ãå Žåã«ã¯ãã£ã³ã»ã«ããã以åŸã€ãã³ãéç¥ã¯å®å
šã«è¡ãããŸããã\n * ãŸã[[Scroller.start]]ã¡ãœããã§ã®åå©çšãäžå¯ãšãªããŸãã\n * æ¬ã€ã³ã¹ã¿ã³ã¹ã®å©çšãå®å
šã«åæ¢ããå Žåã«å¿
ãå®è¡ããå©çšåŽã®ãªããžã§ã¯ãçã«ãããŠæ¬ã€ã³ã¹ã¿ã³ã¹ãžã®åç
§ãå®å
šã«åé€ããŠãã ããã\n * æ¬ã¡ãœããã¯SPAçã§ã®ãµãŒãã¹ã«ãããŠã¯æèçã«å®è¡ããäºãåŒ·ãæšå¥šããŸãã\n */\n destroy() {\n if (this.isDestroyed) return;\n this.stop();\n this.cancel();\n this._readyResolvers = [];\n this._scrollStoppers = [];\n this._scrollEnable();\n this._observers = [];\n visibilityManager.remove(this._visibilityListener);\n\n delete (this as any)._el;\n delete (this as any)._eventTarget;\n delete this._scrollListener;\n delete this._resizeListener;\n delete (this as any)._resizeObserver;\n delete (this as any)._scrollToResult;\n delete (this as any)._visibilityListener;\n\n this.deleteScrollToElementAdditionalOffset();\n this._setState(ScrollerState.Destroyed);\n this.offAll();\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹å
éšã®ã¹ã¯ããŒã«éããElementã®ãµã€ãºã匷å¶çã«æŽæ°ããŸãã\n * åºæ¬çã«å©çšãå¿
èŠãªã±ãŒã¹ã¯ãããŸããããäœããã®çç±ã§æŽæ°ãããªã¬ãŒãããå Žåã«å©çšããŸãã\n */\n update(): void {\n this._update();\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹å
ã®æ
å ±ãjsonãªããžã§ã¯ããšããŠè¿åŽããŸãã\n * æ
å ±ã®è©³çްã¯[[ScrollerObserver]]ãåç
§ããŠãã ããã\n */\n toJSON(): ScrollerObserver {\n const json: Partial<ScrollerObserver> = {};\n for (const key of scrollerObservableKeys) {\n json[key] = this[key] as any;\n }\n return <ScrollerObserver>json;\n }\n\n /**\n * [[Scroller.toJSON]]ã®æ
å ±ãæååãšããŠè¿åŽããŸãã\n */\n toString(): string {\n return JSON.stringify(this.toJSON());\n }\n\n /**\n * æ¬ã€ã³ã¹ã¿ã³ã¹ã®æ
å ±ã賌èªããããã®ãªããžã§ã¯ããèšå®ããäºã§ã\n * ã€ã³ã¹ã¿ã³ã¹ã®å
éšæ
å ±ã倿Žããã床ã«ãã©ã¡ãŒã¿ãåæãããŸãã\n * èšå®ãããªããžã§ã¯ãã¯[[ScrollerObserver]]ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæºãããŠããã°å
容ã¯åããŸããã\n * æ¬æ©èœã«ããåæãããæ¹æ³ã¯åçŽã«ãªããžã§ã¯ãããããã£ãžã®å€æ°ä»£å
¥ã§ãã\n * åŸã£ãŠå¯Ÿè±¡ãšãªãããããã£ãgetterãšããŠå®è£
ïŒEx: Vue computedçããïŒããŠããäºã«ããã\n * åæãåãåããªããžã§ã¯ãåŽã§ãã©ã¡ãŒã¿å€æŽåŸã®åäœããªã¢ã¯ãã£ãã«å®è£
å¯èœã§ãã\n * @param observer - åæãããããªããžã§ã¯ã\n * @returns åæã忢ããããã®ã¡ãœãã\n */\n observe(observer: ScrollerObserver): () => void {\n if (!this._observers.includes(observer)) {\n this._observers.push(observer);\n }\n this._syncToObserver(observer);\n const unobserve = () => {\n this.unobserve(observer);\n };\n return unobserve;\n }\n\n /**\n * [[Scroller.observe]]ã§ãã©ã¡ãŒã¿åæäžã®ãªããžã§ã¯ãã忢ããŸãã\n * [[Scroller.destroy]]å®è¡æã«ããåæäžã®ãªããžã§ã¯ãã¯å
šåæ¢ãããŸãããdestroyåã«ä»»æã®ã¿ã€ãã³ã°ã§åæ¢ãããå Žå\n * æ¬ã¡ãœãããå©çšããŸãã\n * @param observer - åæäžã®ãªããžã§ã¯ã\n */\n unobserve(observer: ScrollerObserver) {\n const index = this._observers.indexOf(observer);\n if (index !== -1) {\n this._observers.splice(index, 1);\n }\n }\n\n /**\n * ã¹ã¯ããŒã«äžã§ãã£ãå Žåãã¹ã¯ããŒã«ããã£ã³ã»ã«ããŸãã\n */\n cancel() {\n if (!this._scrollToResult) return;\n this._scrollToResult.cancel();\n this._clearScrollToResult();\n }\n\n /**\n * x, yã®å·®åpxãæå®ãã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollBy]]ãåç
§ããŠãã ããã\n * @param diffX - 暪移åé\n * @param diffY - 瞊移åé\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n by(\n diffX: number,\n diffY: number,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollBy(diffX, diffY, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * æå®ã®åº§æšãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollTo]]ãåç
§ããŠãã ããã\n * @param scrollPosition - 座æš\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n to(\n scrollPosition: Partial<ScrollPosition>,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollTo(scrollPosition, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * æå®ã®èŠçŽ ã®äœçœ®ãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToElement]]ãåç
§ããŠãã ããã\n * ãªãã·ã§ã³ã®x, yãæªèšå®ã§ãã£ãå Žåã[[Scroller.baseAxis]]ã«ããèªåèšå®ãããŸãã\n * @param target - ã¹ã¯ããŒã«å
ã®èŠçŽ \n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toElement(\n target: ScrollToElementTarget,\n options?: ScrollerScrollToElementOptions,\n ) {\n const merged = this._createMergedScrollToElementOptions(options);\n if (merged.x === undefined) merged.x = this.baseAxis === 'x';\n if (merged.y === undefined) merged.y = this.baseAxis === 'y';\n\n return this._setScrollToResult(scrollToElement(target, merged));\n }\n\n /**\n * æå®ã®èŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToSide]]ãåç
§ããŠãã ããã\n * @param targets - ã¹ã¯ããŒã«å
\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toSide(\n targets: ScrollToSideTargets,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollToSide(targets, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * äžèŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToTop]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å³èŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToRight]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toRight(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRight(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * äžèŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToBottom]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊蟺ãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToLeft]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toLeft(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeft(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å·Šäžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToLeftTop]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toLeftTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å·Šäžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToLeftBottom]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toLeftBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å³äžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToRightTop]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toRightTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å³äžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToRightBottom]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toRightBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * ã¹ã¯ããŒã«ã®åæ¢ãèŠæ±ããŸãã\n * @param stopper - åæ¢èŠæ±ãœãŒã¹\n */\n pushScrollStopper(stopper: ScrollStopper) {\n if (!this._scrollStoppers.includes(stopper)) {\n this._scrollStoppers.push(stopper);\n if (this._scrollStoppers.length === 1) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n return () => {\n this.removeScrollStopper(stopper);\n };\n }\n\n /**\n * ã¹ã¯ããŒã«ã®åæ¢èŠæ±ãè§£é€ããŸãã<br>\n * å¥ã®ããã»ã¹ã«ããç°ãªã[[ScrollStopper]]ãç»é²ãããŠããå Žåã\n * ã¹ã¯ããŒã«ã¯åéãããªãäºã«æ³šæããŠãã ããã\n * @param stopper - åæ¢èŠæ±ãœãŒã¹\n */\n removeScrollStopper(stopper: ScrollStopper) {\n const index = this._scrollStoppers.indexOf(stopper);\n if (index !== -1) {\n this._scrollStoppers.splice(index, 1);\n if (this._scrollStoppers.length === 0) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n }\n\n private async _setup(): Promise<void> {\n this._updateScrollable();\n this._update();\n this._setState(ScrollerState.Ready);\n this.start();\n this.emit('ready', undefined);\n this._readyResolvers.forEach((resolve) => resolve());\n this._readyResolvers = [];\n }\n\n private _setState(state: ScrollerState): void {\n if (this._state !== state) {\n this._state = state;\n this._syncToObservers([\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n ]);\n this.emit('changeState', state);\n }\n }\n\n private _checkDestroyed(): void {\n if (this.isDestroyed) {\n const message = 'already destroyed.';\n logger.error(message);\n throw new Error(message);\n }\n }\n\n private _update(width?: number, height?: number): void {\n this._updateContainerSize(width, height);\n this._updateScrollSize();\n this._updateScrollPositions();\n }\n\n private _updateContainerSize(width?: number, height?: number): void {\n const { el, _isBodyElement } = this;\n if (width === undefined) {\n if (!el) return;\n width = _isBodyElement\n ? (document.documentElement as HTMLElement).clientWidth\n : el.clientWidth;\n }\n\n if (height === undefined) {\n if (!el) return;\n height = _isBodyElement\n ? (document.documentElement as HTMLElement).clientHeight\n : el.clientHeight;\n }\n\n const { _containerWidth, _containerHeight } = this;\n this._containerWidth = width;\n this._containerHeight = height;\n if (width !== _containerWidth || height !== _containerHeight) {\n this._syncToObservers([\n 'containerWidth',\n 'containerHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n this.emit('resize', { width, height });\n }\n }\n\n private _updateScrollSize(): void {\n const { el, _scrollWidth, _scrollHeight } = this;\n if (!el) return;\n this._scrollWidth = el.scrollWidth;\n this._scrollHeight = el.scrollHeight;\n if (\n _scrollWidth !== this._scrollWidth ||\n _scrollHeight !== this._scrollHeight\n ) {\n this._syncToObservers([\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n }\n }\n\n private _startScrollSizeObserver() {\n if (!IN_WINDOW) return;\n\n this._stopScrollSizeObserver();\n\n if (this.scrollSizeObserver) {\n this._scrollSizeObserverPollingId = window.setInterval(() => {\n if (!this.scrollSizeObserver || this.isDestroyed) {\n this._stopScrollSizeObserver();\n return;\n }\n\n this._updateScrollSize();\n }, this.scrollSizeObserver.interval);\n }\n }\n\n private _stopScrollSizeObserver() {\n if (this._scrollSizeObserverPollingId !== null) {\n clearInterval(this._scrollSizeObserverPollingId);\n this._scrollSizeObserverPollingId = null;\n }\n }\n\n private _updateScrollPositions(): void {\n if (!this.el) return;\n this._scrollTop = this.el.scrollTop;\n this._scrollLeft = this.el.scrollLeft;\n\n // advanced values\n this._scrollBottom =\n this._scrollHeight - this._scrollTop - this._containerHeight;\n this._scrollRight =\n this._scrollWidth - this._scrollLeft - this._containerWidth;\n\n this._syncToObservers([\n 'scrollTop',\n 'scrollRight',\n 'scrollBottom',\n 'scrollLeft',\n ]);\n }\n\n private _startListeners() {\n this._stopListeners();\n\n this._scrollListener = () => {\n this._onScroll();\n };\n this._eventTarget.addEventListener('scroll', this._scrollListener, false);\n\n if (this._isRootElement) {\n this._resizeListener = () => {\n this._onResize();\n };\n window.addEventListener('resize', this._resizeListener, false);\n } else {\n this._resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this._onResize(width, height);\n }\n });\n this._el && this._resizeObserver.observe(this._el);\n }\n\n if (visibilityManager.isVisible) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n } else {\n this._scrollSizeObserverSuspended = true;\n }\n }\n\n private _stopListeners() {\n if (this._scrollListener) {\n this._eventTarget.removeEventListener(\n 'scroll',\n this._scrollListener,\n false,\n );\n delete this._scrollListener;\n }\n\n if (this._resizeListener) {\n if (this._isDocumentElement) {\n window.removeEventListener('resize', this._resizeListener, false);\n delete this._resizeListener;\n }\n }\n\n if (this._resizeObserver && this._el) {\n this._resizeObserver.unobserve(this._el);\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n }\n\n private _clearScrollingJudgeTimer() {\n if (this._scrollingJudgeTimerId !== null) {\n clearTimeout(this._scrollingJudgeTimerId);\n this._scrollingJudgeTimerId = null;\n }\n }\n\n private _onResize(width?: number, height?: number) {\n this._update(width, height);\n }\n\n private _triggerScrollTick(event: keyof ScrollerScrollEventMap): void {\n const { _nowScrolling } = this;\n\n if (event === 'scrollStart') {\n this._startX = this._scrollLeft;\n this._startY = this._scrollTop;\n this._lastTotalX = 0;\n this._lastTotalY = 0;\n this._nowScrolling = true;\n } else if (event === 'scrollEnd') {\n this._nowScrolling = false;\n }\n\n if (_nowScrolling !== this._nowScrolling) {\n this._syncToObservers('nowScrolling');\n }\n this.emit(event, this.lastPayload);\n }\n\n private _onScroll() {\n if (!this.scrollEnabled && this._el) {\n this._el.scrollLeft = this._scrollLeft;\n this._el.scrollTop = this._scrollTop;\n return;\n }\n\n // remember before values\n const {\n _scrollTop,\n _scrollLeft,\n _lastAxis,\n _lastDirection,\n _lastXDirection,\n _lastYDirection,\n } = this;\n\n // ,,,and next update values\n this._updateScrollPositions();\n\n // calculate scrolled amount at (ticked time)\n const tickedX = this._scrollLeft - _scrollLeft;\n const tickedY = this._scrollTop - _scrollTop;\n this._tickedX = tickedX;\n this._tickedY = tickedY;\n\n // update axis\n if (tickedX === tickedY) {\n this._lastAxis = this.baseAxis;\n } else {\n this._lastAxis = Math.abs(tickedX) > Math.abs(tickedY) ? 'x' : 'y';\n }\n\n // update directions\n if (_scrollTop < this._scrollTop) {\n this._lastYDirection = 'bottom';\n } else if (_scrollTop > this._scrollTop) {\n this._lastYDirection = 'top';\n }\n\n if (_scrollLeft < this._scrollLeft) {\n this._lastXDirection = 'right';\n } else if (_scrollLeft > this._scrollLeft) {\n this._lastXDirection = 'left';\n }\n\n this._lastDirection =\n this._lastAxis === 'y' ? this._lastYDirection : this._lastXDirection;\n\n // judge scroll end by before axis and directions\n const axisIsChanged = this._lastAxis !== _lastAxis;\n const lastXDirectionIsChanged = this._lastXDirection !== _lastXDirection;\n const lastYDirectionIsChanged = this._lastYDirection !== _lastYDirection;\n const lastDirectionIsChanged = this._lastDirection !== _lastDirection;\n\n if (axisIsChanged) {\n this.emit('changeAxis', this._lastAxis);\n }\n\n if (lastXDirectionIsChanged) {\n this.emit('changeLastXDirection', this._lastXDirection);\n }\n\n if (lastYDirectionIsChanged) {\n this.emit('changeLastYDirection', this._lastYDirection);\n }\n\n if (lastDirectionIsChanged) {\n this.emit('changeLastDirection', this._lastDirection);\n }\n\n if (\n axisIsChanged ||\n lastXDirectionIsChanged ||\n lastYDirectionIsChanged ||\n lastDirectionIsChanged\n ) {\n this._syncToObservers([\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n ]);\n }\n\n if (this._nowScrolling) {\n if (\n axisIsChanged ||\n (_lastAxis === 'y' && lastYDirectionIsChanged) ||\n (_lastAxis === 'x' && lastXDirectionIsChanged)\n ) {\n // emit scroll end & start(both)\n this._triggerScrollTick('scrollEnd');\n } else {\n // add scroll amounts\n this._lastTotalX = this._scrollLeft - this._startX;\n this._lastTotalY = this._scrollTop - this._startY;\n this._triggerScrollTick('scroll');\n }\n }\n\n // judge scroll start\n if (!this._nowScrolling) {\n this._updateScrollSize();\n this._triggerScrollTick('scrollStart');\n }\n\n this._clearScrollingJudgeTimer();\n this._scrollingJudgeTimerId = window.setTimeout(() => {\n this._triggerScrollTick('scrollEnd');\n }, this.scrollingJudgeInterval);\n }\n\n private _syncToObserver(\n observer: ScrollerObserver,\n keys: ScrollerObservableKeys[] = scrollerObservableKeys,\n ) {\n for (const key of keys) {\n (observer as any)[key] = this[key];\n }\n }\n\n private _syncToObservers(\n keys: ScrollerObservableKeys | ScrollerObservableKeys[],\n ) {\n if (this._observers.length === 0) return;\n keys = typeof keys === 'string' ? [keys] : keys;\n for (const observer of this._observers) {\n this._syncToObserver(observer, keys);\n }\n }\n\n private _checkElement() {\n const { _el } = this;\n if (!_el) {\n const message = 'missing element';\n logger.error(message);\n throw new Error(message);\n }\n return _el;\n }\n\n private _createMergedScrollOptions(\n source?: ScrollerScrollOptions,\n ): ScrollOptions {\n const el = this._checkElement();\n const merged: ScrollOptions = {\n container: el,\n ...this.scrollSettingsDefaults,\n ...source,\n };\n return merged;\n }\n\n private _createMergedScrollToElementOptions(\n source?: ScrollerScrollToElementOptions,\n ): ScrollToElementOptions {\n const el = this._checkElement();\n const merged: ScrollToElementOptions = {\n container: el,\n ...this.scrollToElementSettingsDefaults,\n ...source,\n };\n let { _scrollToElementAdditionalOffset: additionalOffset } = this;\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'function') {\n additionalOffset = additionalOffset(this);\n }\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'number') {\n additionalOffset = {\n x: additionalOffset,\n y: additionalOffset,\n };\n }\n let { offset } = merged;\n if (!offset) {\n merged.offset = additionalOffset;\n return merged;\n }\n if (typeof offset === 'number') {\n offset = {\n x: offset,\n y: offset,\n };\n }\n\n offset.x = (offset.x || 0) + (additionalOffset.x || 0);\n offset.y = (offset.y || 0) + (additionalOffset.y || 0);\n merged.offset = offset;\n return merged;\n }\n\n private _clearScrollToResult() {\n if (!this._scrollToResult) return;\n this._scrollToResult = null;\n }\n\n private _setScrollToResult(result: ScrollResult): ScrollResult {\n this._scrollToResult = result;\n result.promise.then(() => {\n this._clearScrollToResult();\n });\n return result;\n }\n\n private _updateScrollable() {\n if (this.scrollEnabled) {\n this._scrollEnable();\n } else {\n this._scrollDisable();\n }\n }\n\n private _scrollEnable() {\n enableScroll(this._checkElement());\n }\n\n private _scrollDisable() {\n const el = this._checkElement();\n this.cancel();\n disableScroll(el);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/util.ts","../src/logger.ts","../src/prevent-scroll.ts","../src/scroll/schemes.ts","../src/scroll/easings.ts","../src/scroll/util.ts","../src/scroll/scroll-by-internal.ts","../src/scroll/scroll-by.ts","../src/scroll/scroll-to.ts","../src/scroll/scroll-to-element.ts","../src/scroll/scroll-to-side.ts","../src/scroller.ts"],"names":["isBodyElement","ScrollerState"],"mappings":"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","file":"scroller.mjs","sourcesContent":["// export const HAS_WINDOW = typeof window !== 'undefined';\n\n// export function warn(message: string): void {\n// if (typeof console === 'object' && console.warn) {\n// console.warn(`[scroller] ${message}`);\n// }\n// }\n\n// export function error(message: string): Error {\n// return new Error(`[scroller] ${message}`);\n// }\n\nexport function isDocumentElement(el: Element): el is HTMLHtmlElement {\n return el.constructor === HTMLHtmlElement;\n}\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.constructor === HTMLBodyElement;\n}\n\nexport function isRootElement(\n el: Element,\n): el is HTMLHtmlElement | HTMLBodyElement {\n return isDocumentElement(el) || isBodyElement(el);\n}\n","import { TinyLogger } from '@fastkit/tiny-logger';\n\nexport const logger = new TinyLogger('scroller');\n","// space: 32, page up: 33, page down: 34, end: 35, home: 36\n// left: 37, up: 38, right: 39, down: 40\nexport const SCROLLABLE_KEY_CODES = [32, 33, 34, 35, 36, 37, 38, 39, 40];\n\nexport interface PreventScrollOptions {\n hideScrollbar: boolean;\n}\n\nexport interface PreventScrollContext {\n options: PreventScrollOptions;\n el: PreventScrollElement;\n overflowOrigin?: string | null;\n lockPosition: {\n x: number;\n y: number;\n };\n}\n\nexport interface PreventScrollElement extends HTMLElement {\n __ps_ctx__: PreventScrollContext;\n}\n\nconst eventListenerOptions: AddEventListenerOptions = {\n passive: false,\n};\n\nconst handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n};\n\nconst handleScroll = (e: Event) => {\n const el = e.target as PreventScrollElement;\n if (el && el.__ps_ctx__) {\n el.scrollTo(el.__ps_ctx__.lockPosition.x, el.__ps_ctx__.lockPosition.y);\n }\n};\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (\n e.target &&\n ['INPUT', 'TEXTAREA'].includes((e.target as HTMLElement).tagName)\n ) {\n return;\n }\n if (SCROLLABLE_KEY_CODES.includes(e.which)) {\n e.preventDefault();\n }\n};\n\nexport function enableScroll(el: Element) {\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (!_el.__ps_ctx__) return;\n\n const { options } = _el.__ps_ctx__;\n\n _el.removeEventListener('wheel', handleWheel, eventListenerOptions);\n _el.removeEventListener('scroll', handleScroll, eventListenerOptions);\n _el.removeEventListener('keydown', handleKeydown);\n\n if (options.hideScrollbar) {\n _el.style.overflow = _el.__ps_ctx__.overflowOrigin as string;\n }\n delete (_el as any).__ps_ctx__;\n}\n\nexport function disableScroll(\n el: Element,\n opts: Partial<PreventScrollOptions> = {},\n) {\n const { hideScrollbar = false } = opts;\n\n const _el: PreventScrollElement = <PreventScrollElement>el;\n if (_el.__ps_ctx__) return;\n\n const options = {\n hideScrollbar,\n };\n\n _el.__ps_ctx__ = {\n options,\n el: _el,\n overflowOrigin: _el.style.overflow,\n lockPosition: {\n x: _el.scrollLeft || (_el as any).scrollX,\n y: _el.scrollTop || (_el as any).scrollY,\n },\n };\n\n if (options.hideScrollbar) {\n _el.style.overflow = 'hidden';\n }\n\n _el.addEventListener('wheel', handleWheel, eventListenerOptions);\n _el.addEventListener('scroll', handleScroll, eventListenerOptions);\n _el.addEventListener('keydown', handleKeydown);\n}\n","import { EasingName } from './easings';\n\n/**\n * ã¹ã¯ããŒã«ç³»ã¡ãœããã®åºæ¬ãªãã·ã§ã³èšå®ã§ãã\n */\nexport interface ScrollBaseSettings {\n /**\n * ã¢ãã¡ãŒã·ã§ã³ã®ç·åæéãmsåäœã§æå®ããŸãã\n */\n duration: number;\n\n /**\n * ã¢ãã¡ãŒã·ã§ã³ã®ã€ãŒãžã³ã°ãæå®ããŸãã\n * {@link EasingName}\n */\n easing: EasingName;\n\n /**\n * ã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«ããäžæå¯èœããbooleanå€ã§ç€ºããŸãã\n */\n cancelable: boolean;\n}\n\n/**\n * Scrollerã§å©çšããã¹ã¯ããŒã«ç³»ã¡ãœããã®ãªãã·ã§ã³èšå®ã§ãã\n */\nexport interface ScrollerScrollSettings extends ScrollBaseSettings {\n onProgress?: ScrollCallback;\n onCancel?: ScrollCallback;\n onDone?: ScrollCallback;\n}\n\nexport interface ScrollSettings extends ScrollerScrollSettings {\n container: string | Element;\n}\n\nexport type ScrollerScrollOptions = Partial<ScrollerScrollSettings>;\nexport type ScrollOptions = Partial<ScrollSettings>;\n\n/**\n * ã¹ã¯ããŒã«é¢é£ã¡ãœããã«ããã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ããã£ã³ã»ã«ããã¡ãœããã§ãã<br>\n * ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³èµ·å ã®äžæã®å ŽåãEventãªããžã§ã¯ããæž¡ãããŸãã\n */\nexport type ScrollCanceller = (\n event?: Event | null,\n checkCancelable?: boolean,\n) => void;\n\n/**\n * ã¹ã¯ããŒã«é¢é£ã¡ãœããã®è¿åŽå€ãšãªãã€ã³ã¿ãŒãã§ãŒã¹ã§ãã\n */\nexport interface ScrollResult {\n /**\n * ã¹ã¯ããŒã«ããã£ã³ã»ã«ããã¡ãœããã§ãã\n */\n cancel: ScrollCanceller;\n\n /**\n * ã¹ã¯ããŒã«ã®å®äºããã£ã³ã»ã«ãäžæãåããçµäºãæ€ç¥ããPromiseã€ã³ã¹ã¿ã³ã¹ã§ãã\n */\n promise: Promise<void>; // resolve when done or cancel\n\n /**\n * ã¹ã¯ããŒã«éå§äœçœ®ããå®äºäœçœ®ãŸã§ã®æ³å®pxæ°ãxãy軞å
±ã«è¿åŽããŸãã<br>\n * ã¹ã¯ããŒã«ãéäžã§ãã£ã³ã»ã«ãããå Žåã¯ãã®pxãå ç®ãããŠããªãäºããããŸãã\n */\n plans: { x: number; y: number };\n}\n\n/**\n * ã¹ã¯ããŒã«é¢é£ã®åçš®ã¡ãœããã«ãããŠãã³ãŒã«ããã¯ã¡ãœããã«æž¡ãããã€ã³ã¿ãŒãã§ãŒã¹ã§ãã\n */\nexport interface ScrollCallbackValues {\n /**\n * ã¹ã¯ããŒã«äžã®ã³ã³ããèŠçŽ ã§ãã\n */\n container: Element;\n\n /**\n * ã¹ã¯ããŒã«ã®é²æã0ã1ã§ç€ºããŸãã\n */\n progress: number;\n\n /**\n * ã¹ã¯ããŒã«ãäžæãããŠããå Žåtrueã瀺ããŸãã\n */\n aborted: boolean;\n\n /**\n * ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«ããã¹ã¯ããŒã«ãäžæãããŠããå Žåããã®Eventãªããžã§ã¯ããèšå®ãããŸãã\n */\n abortEventSource: Event | null;\n}\n\nexport type ScrollCallback = (\n scrollToCallbackValues: ScrollCallbackValues,\n) => any;\n\n/**\n * ã¹ã¯ããŒã«å€ãx軞ãy軞ã§ç€ºããŸãã\n */\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const defaultBaseSettings: ScrollBaseSettings = {\n duration: 500,\n easing: 'ease',\n cancelable: true,\n};\n\nexport const defaultSettings: ScrollSettings = {\n get container(): Element {\n return document.scrollingElement as Element;\n },\n ...defaultBaseSettings,\n};\n","const easings = {\n ease: [0.25, 0.1, 0.25, 1.0] as EasingValues,\n linear: [0.0, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-in': [0.42, 0.0, 1.0, 1.0] as EasingValues,\n 'ease-out': [0.0, 0.0, 0.58, 1.0] as EasingValues,\n 'ease-in-out': [0.42, 0.0, 0.58, 1.0] as EasingValues,\n};\nexport type EasingName = keyof typeof easings;\nexport type EasingValues = [number, number, number, number];\nexport default easings;\n","import { logger } from '../logger';\n\nexport function isBodyElement(el: Element): el is HTMLBodyElement {\n return el.tagName.toLowerCase() === 'body';\n}\n\nexport function getContainerDimension(el: Element) {\n if (isBodyElement(el)) {\n const documentElement = <HTMLElement>document.documentElement;\n return {\n // width: window.innerWidth,\n // height: window.innerHeight,\n width: documentElement.clientWidth,\n height: documentElement.clientWidth,\n };\n }\n return {\n width: el.clientWidth,\n height: el.clientHeight,\n };\n}\n\nexport function $(selectorOrElement: string | Element): HTMLElement | null {\n if (typeof selectorOrElement !== 'string')\n return selectorOrElement as HTMLElement;\n return document.querySelector(selectorOrElement);\n}\n\nexport function cumulativeOffset(element: Element) {\n let top = 0;\n let left = 0;\n let el: HTMLElement | null = element as HTMLElement;\n\n while (el) {\n top += el.offsetTop || 0;\n left += el.offsetLeft || 0;\n el = el.offsetParent as HTMLElement;\n }\n\n return {\n top,\n left,\n };\n}\n\nexport type HTMLElementEventMapKey =\n | keyof HTMLElementEventMap\n | 'DOMMouseScroll'\n | 'mousewheel';\n\nexport function on(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n opts = { passive: false },\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.addEventListener(events[i], handler, opts);\n }\n}\n\nexport function off(\n element: Element,\n events: HTMLElementEventMapKey | HTMLElementEventMapKey[],\n handler: EventListenerOrEventListenerObject,\n) {\n if (!Array.isArray(events)) events = [events];\n for (let i = 0; i < events.length; i++) {\n element.removeEventListener(events[i], handler);\n }\n}\n\nexport function warn(message: string): void {\n logger.warn(message);\n}\n\nexport function error(message: string): Error {\n return new Error(`[scroll] ${message}`);\n}\n","import BezierEasing, { EasingFunction } from 'bezier-easing';\nimport { removeUndef } from '@fastkit/helpers';\nimport easings, { EasingValues } from './easings';\nimport {\n ScrollResult,\n ScrollCallbackValues,\n ScrollOptions,\n defaultSettings,\n} from './schemes';\nimport {\n $,\n on,\n off,\n getContainerDimension,\n HTMLElementEventMapKey,\n error,\n} from './util';\nimport { PreventScrollElement } from '../prevent-scroll';\n\ninterface ComputedValues {\n $container: HTMLElement;\n initialX: number;\n initialY: number;\n targetX: number;\n targetY: number;\n}\n\nconst abortEvents: HTMLElementEventMapKey[] = [\n 'mousedown',\n 'wheel',\n 'DOMMouseScroll',\n 'mousewheel',\n 'keyup',\n 'touchmove',\n];\n\nexport function scroll(\n diffX: number,\n diffY: number,\n // eslint-disable-next-line default-param-last\n options: ScrollOptions = {},\n _computedValues?: ComputedValues,\n): ScrollResult {\n let $container: HTMLElement;\n let initialX: number;\n let initialY: number;\n let targetX: number;\n let targetY: number;\n\n const _options = { ...defaultSettings, ...removeUndef(options) };\n const {\n container,\n duration,\n easing,\n cancelable,\n onProgress,\n onCancel,\n onDone,\n } = _options;\n\n const x = diffX !== 0;\n const y = diffY !== 0;\n\n if (_computedValues) {\n $container = _computedValues.$container;\n initialX = _computedValues.initialX;\n initialY = _computedValues.initialY;\n targetX = _computedValues.targetX;\n targetY = _computedValues.targetY;\n } else {\n $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n initialX = $container.scrollLeft;\n initialY = $container.scrollTop;\n targetX = initialX + diffX;\n targetY = initialY + diffY;\n }\n\n // compute overflow and adjust values\n const { scrollWidth, scrollHeight } = $container;\n const { width, height } = getContainerDimension($container);\n const overflowX = targetX + width - scrollWidth;\n const overflowY = targetY + height - scrollHeight;\n if (overflowX > 0) {\n diffX -= overflowX;\n targetX -= overflowX;\n }\n if (overflowY > 0) {\n diffY -= overflowY;\n targetY -= overflowY;\n }\n\n //\n // Setup Temporary values\n //\n // eslint-disable-next-line @typescript-eslint/ban-types\n let doneResolver: Function;\n let timeStart = 0;\n let timeElapsed: number;\n\n const callbackValues: ScrollCallbackValues = {\n container: $container,\n progress: 0,\n aborted: false,\n abortEventSource: null,\n };\n\n const result: ScrollResult = {\n cancel: canceller,\n promise: new Promise((resolve) => {\n doneResolver = resolve;\n }),\n plans: {\n x: diffX,\n y: diffY,\n },\n };\n\n //\n // processes\n //\n if (\n (diffY === 0 && diffX === 0) ||\n !!($container as PreventScrollElement).__ps_ctx__\n )\n return initialAbort();\n\n // setup easings\n let easingValues: EasingValues;\n if (!easing) {\n easingValues = easings.ease;\n } else if (typeof easing === 'string') {\n easingValues = easings[_options.easing];\n } else {\n easingValues = easing;\n }\n const easingFn: EasingFunction = BezierEasing.apply(\n BezierEasing,\n easingValues,\n );\n\n on($container, abortEvents, abortFn, { passive: true });\n window.requestAnimationFrame(step);\n return result;\n\n //\n // inner methods\n //\n function doneResolve(): void {\n doneResolver();\n }\n\n function canceller(e: Event | null = null, checkCancelable = false) {\n if (checkCancelable && !cancelable) return;\n off($container, abortEvents, abortFn);\n callbackValues.abortEventSource = e;\n callbackValues.aborted = true;\n onCancel && onCancel(callbackValues);\n }\n\n function abortFn(e: Event) {\n canceller(e, true);\n }\n\n function initialAbort(e: Event | null = null) {\n canceller(e);\n doneResolve();\n return result;\n }\n\n function step(timestamp: number): void {\n if (callbackValues.aborted) return done();\n if (!timeStart) timeStart = timestamp;\n\n timeElapsed = timestamp - timeStart;\n\n let progress = Math.min(timeElapsed / duration, 1);\n progress = easingFn(progress);\n callbackValues.progress = progress;\n\n topLeft(initialY + diffY * progress, initialX + diffX * progress);\n onProgress && onProgress(callbackValues);\n\n timeElapsed < duration ? window.requestAnimationFrame(step) : done();\n }\n\n function topLeft(top: number, left: number) {\n if (y) $container.scrollTop = top;\n if (x) $container.scrollLeft = left;\n }\n\n function done() {\n if (!callbackValues.aborted) topLeft(targetY, targetX);\n timeStart = 0;\n off($container, abortEvents, abortFn);\n callbackValues.progress = 1;\n doneResolve();\n if (!callbackValues.aborted && onDone) onDone(callbackValues);\n }\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult } from './schemes';\n\n/**\n * æå®ã®å·®åã ãã³ã³ãããã¹ã¯ããŒã«ããŸãã\n * @param diffX - 暪軞ã®ç§»åéïŒpxïŒã§ããããã©ã«ãã¯0ã§ãã\n * @param diffY - 瞊軞ã®ç§»åéïŒpxïŒã§ããããã©ã«ãã¯0ã§ãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollBy(\n diffX: number,\n diffY: number,\n options?: ScrollOptions,\n): ScrollResult {\n return scroll(diffX, diffY, options);\n}\n","import { scroll } from './scroll-by-internal';\nimport {\n ScrollOptions,\n defaultSettings,\n ScrollPosition,\n ScrollResult,\n} from './schemes';\nimport { $, error } from './util';\n\n/**\n * ä»»æã®äœçœ®ïŒpxïŒãžã³ã³ãããã¹ã¯ããŒã«ããŸãã\n * @param scrollPosition - ã¹ã¯ããŒã«å
ãæå®ããŸããx, y å
±ã«ãªãã·ã§ãã«ãªãã§ããæªæå®ã®è»žã¯çŸåšã®ã¹ã¯ããŒã«å€ã®ãŸãŸä¿æãããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollTo(\n scrollPosition: Partial<ScrollPosition>,\n options: ScrollOptions = {},\n): ScrollResult {\n let { x, y } = scrollPosition;\n const container = options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n if (x === undefined) x = initialX;\n if (y === undefined) y = initialY;\n const diffX = x - initialX;\n const diffY = y - initialY;\n\n return scroll(diffX, diffY, options, {\n $container,\n initialX,\n initialY,\n targetX: x,\n targetY: y,\n });\n}\n","import { scroll } from './scroll-by-internal';\nimport { ScrollOptions, ScrollResult, defaultSettings } from './schemes';\nimport { $, cumulativeOffset, error } from './util';\n\n/**\n * ã¹ã¯ããŒã«å
ã®èŠçŽ ãElement or CSSã¯ãšãªã¹ããªã³ã°ã§ç€ºããŸãã\n */\nexport type ScrollToElementTarget = string | Element;\n\n/**\n * èŠçŽ ãžã¹ã¯ããŒã«ããéã®ãªãã·ã§ã³èšå®ã§ãã\n */\nexport interface ScrollToElementSettings {\n /**\n * èŠçŽ ãžã¹ã¯ããŒã«ããéããã®ã¹ã¯ããŒã«å
ããããéã«èšå®ããŸãã<br>\n * x, y åå¥ã«èšå®ãå¯èœã§ãããã·ã³ã°ã«ã®numberã®ã¿ãæå®ããå Žåãx, y ã®ããããã®ãªãã·ã§ã³ãæå¹ãªå Žåã«ã®ã¿ãã®è»žã«èšå®ãããŸãã\n */\n offset: number | { x?: number; y?: number };\n\n /**\n * 暪ã¹ã¯ããŒã«ã®å¯åŠã瀺ããŸãã\n */\n x: boolean;\n\n /**\n * 瞊ã¹ã¯ããŒã«ã®å¯åŠã瀺ããŸãã\n */\n y: boolean;\n}\n\n/**\n * èŠçŽ ã¹ã¯ããŒã«å©çšäºã®ããã©ã«ãèšå®ã§ãã\n * {@link ScrollToElementSettings}\n */\nexport const scrollToElementSettingsDefaults: ScrollToElementSettings = {\n offset: 0,\n x: false,\n y: true,\n};\n\n/**\n * èŠçŽ ãžã¹ã¯ããŒã«ãããéã®ãªãã·ã§ã³èšå®ã§ãã\n */\nexport type ScrollToElementOptions = Partial<\n ScrollOptions & ScrollToElementSettings\n>;\n\n/**\n * ä»»æã®èŠçŽ ã®äœçœ®ãžã¹ã¯ããŒã«ããŸãã\n * @param target - ã¹ã¯ããŒã«å
ã®èŠçŽ \n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToElement(\n target: ScrollToElementTarget,\n options: ScrollToElementOptions = {},\n): ScrollResult {\n //\n // Setup Options\n //\n\n const _options = { ...scrollToElementSettingsDefaults, ...options };\n\n const { x, y } = _options;\n\n const offsetSource = _options.offset;\n\n const offset =\n typeof offsetSource === 'number'\n ? { x: offsetSource, y: offsetSource }\n : offsetSource;\n\n //\n // Setup Elements\n //\n\n const $target = $(target) as HTMLElement;\n if (!$target) throw error(`missing element ${target}`);\n\n const container = _options.container || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n const cumulativeOffsetContainer = cumulativeOffset($container);\n const cumulativeOffsetTarget = cumulativeOffset($target);\n\n const initialY = $container.scrollTop;\n const initialX = $container.scrollLeft;\n\n const targetY =\n cumulativeOffsetTarget.top -\n cumulativeOffsetContainer.top +\n (offset.y || 0);\n\n const targetX =\n cumulativeOffsetTarget.left -\n cumulativeOffsetContainer.left +\n (offset.x || 0);\n\n const diffX = x ? targetX - initialX : 0;\n const diffY = y ? targetY - initialY : 0;\n\n return scroll(diffX, diffY, _options, {\n $container,\n initialX,\n initialY,\n targetX,\n targetY,\n });\n}\n","import {\n ScrollOptions,\n ScrollResult,\n defaultSettings,\n ScrollPosition,\n} from './schemes';\nimport { $, error } from './util';\nimport { scrollTo } from './scroll-to';\n\n/**\n * y軞ã®äž¡ç«¯ã®èŸºã瀺ããŸãã\n */\nexport type ScrollYSide = 'top' | 'bottom';\n\n/**\n * x軞ã®äž¡ç«¯ã®èŸºã瀺ããŸãã\n */\nexport type ScrollXSide = 'left' | 'right';\n\n/**\n * ã³ã³ããã®4蟺ã瀺ããŸãã\n */\nexport type ScrollSide = ScrollYSide | ScrollXSide;\n\n/**\n * ã³ã³ããã®èŸºãžã¹ã¯ããŒã«ãããéã®ã¿ãŒã²ããæå®ã®ãã¿ãŒã³ã§ãã\n */\nexport type ScrollToSideTargets =\n | ScrollSide\n | [ScrollSide]\n | [ScrollYSide, ScrollXSide]\n | [ScrollXSide, ScrollYSide];\n\n/**\n * ã³ã³ãããããããã®èŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param targets - 蟺ãæå®ããŸããã·ã³ã°ã«ã®æååãåã³é
åã«å¯Ÿå¿ããŠããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToSide(\n targets: ScrollToSideTargets,\n options?: ScrollOptions,\n): ScrollResult {\n const sides: ScrollSide[] = typeof targets === 'string' ? [targets] : targets;\n const position: Partial<ScrollPosition> = {};\n\n const hasRight = sides.includes('right');\n const hasBottom = sides.includes('bottom');\n\n if (sides.includes('top')) {\n position.y = 0;\n }\n\n if (sides.includes('left')) {\n position.x = 0;\n }\n\n if (hasRight || hasBottom) {\n const container =\n (options && options.container) || defaultSettings.container;\n const $container = $(container) as HTMLElement;\n if (!$container) throw error(`missing container ${container}`);\n\n if (hasRight) position.x = $container.scrollWidth;\n if (hasBottom) position.y = $container.scrollHeight;\n }\n\n return scrollTo(position, options);\n}\n\n/**\n * ã³ã³ãããäžèŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToTop(options?: ScrollOptions) {\n return scrollToSide('top', options);\n}\n\n/**\n * ã³ã³ãããå³èŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToRight(options?: ScrollOptions) {\n return scrollToSide('right', options);\n}\n\n/**\n * ã³ã³ãããäžèŸºãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToBottom(options?: ScrollOptions) {\n return scrollToSide('bottom', options);\n}\n\n/**\n * ã³ã³ããã巊蟺ãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToLeft(options?: ScrollOptions) {\n return scrollToSide('left', options);\n}\n\n/**\n * ã³ã³ãããå·Šäžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToLeftTop(options?: ScrollOptions) {\n return scrollToSide(['left', 'top'], options);\n}\n\n/**\n * ã³ã³ãããå·Šäžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToLeftBottom(options?: ScrollOptions) {\n return scrollToSide(['left', 'bottom'], options);\n}\n\n/**\n * ã³ã³ãããå³äžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToRightTop(options?: ScrollOptions) {\n return scrollToSide(['right', 'top'], options);\n}\n\n/**\n * ã³ã³ãããå³äžã³ãŒããŒãŸã§ã¹ã¯ããŒã«ããŸãã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\nexport function scrollToRightBottom(options?: ScrollOptions) {\n return scrollToSide(['right', 'bottom'], options);\n}\n","import { EV } from '@fastkit/ev';\nimport {\n visibilityManager,\n VisibilityStateListener,\n} from '@fastkit/visibility';\nimport { IN_WINDOW } from '@fastkit/helpers';\nimport { isDocumentElement, isBodyElement } from './util';\nimport { logger } from './logger';\n\nimport { enableScroll, disableScroll } from './prevent-scroll';\n\nimport {\n ScrollPosition,\n ScrollOptions,\n ScrollBaseSettings,\n ScrollToElementTarget,\n ScrollResult,\n ScrollerScrollOptions,\n ScrollToElementSettings,\n scrollToElementSettingsDefaults as _scrollToElementSettingsDefaults,\n scrollBy,\n scrollTo,\n scrollToElement,\n scrollToSide,\n scrollToTop,\n scrollToRight,\n scrollToBottom,\n scrollToLeft,\n scrollToLeftTop,\n scrollToLeftBottom,\n scrollToRightTop,\n scrollToRightBottom,\n ScrollToSideTargets,\n ScrollToElementOptions,\n} from './scroll';\n\nimport { defaultBaseSettings } from './scroll/schemes';\n\nexport * from './prevent-scroll';\n\nexport * from './scroll';\n\nexport type ScrollToElementAdditionalOffset =\n | number\n | { x?: number; y?: number }\n | ((scroller: Scroller) => number | { x?: number; y?: number } | undefined);\n\n/**\n * [[Scroller]]ãä»»æã®ElementãŸã§ã¹ã¯ããŒã«ãããéã®ãªãã·ã§ã³ã§ãã\n * 詳现㯠[[ScrollerScrollOptions]] åã³ã [[ScrollToElementSettings]] ãåç
§ããŠãã ããã\n */\nexport type ScrollerScrollToElementOptions = Partial<\n ScrollerScrollOptions & ScrollToElementSettings\n>;\n\n// Scroller ã¯èšå®ãããã³ã³ããã¹ãèŠçŽ ã«å¿ããŠscrollãsizeæ€ç¥ã®ãªã¹ãã\n// window ã èªèº«ã®elementã«åãæ¿ããŸã\ntype ScrollerEventTarget = Window | Element;\n\n/**\n * Scrollerã«çžŠã¹ã¯ããŒã«ãçºçããéã®æ¹åã瀺ãTypeã§ãã\n */\nexport type ScrollYDirection = 'top' | 'bottom';\n\n/**\n * Scrollerã«æšªã¹ã¯ããŒã«ãçºçããéã®æ¹åã瀺ãTypeã§ãã\n */\nexport type ScrollXDirection = 'left' | 'right';\n\n/**\n * Scrollerã«ã¹ã¯ããŒã«ãçºçããéã®æ¹åã瀺ãTypeã§ãã\n */\nexport type ScrollDirection = ScrollYDirection | ScrollXDirection;\n\n/**\n * ã¹ã¯ããŒã«ã®è»žã瀺ããŸãã\n * xã¯æ°Žå¹³ã\n * yã¯åçŽããããã瀺ããŸã\n */\nexport type ScrollAxis = 'x' | 'y';\n\nexport interface ScrollSizeObserverSetting {\n interval: number;\n width: boolean;\n height: boolean;\n}\n\n/**\n * Scrollerã®åºæ¬ã»ããã£ã³ã°ã§ãã\n * åã
ã®ãã£ãŒã«ãã®è©³çްã¯[[Scroller]]ã®ååããããã£ãåç
§ããŠãã ããã\n */\nexport interface ScrollerSetting {\n el: Element | string | null;\n scrollingJudgeInterval: number;\n baseAxis: ScrollAxis;\n scrollSizeObserver: Partial<ScrollSizeObserverSetting>;\n}\n\n/**\n * Elementã®scrollã€ãã³ããæ€ç¥ããéã«ãéç¥ããæ
å ±ã§ã\n * çŸåšã®ã¹ã¯ããŒã«ããžã·ã§ã³ããã¹ã¯ããŒã«éå§ïŒorååã®tickïŒããã®ã¹ã¯ããŒã«éãæž¡ãããŸãã\n */\nexport interface ScrollerPayload {\n /**\n * [[Scroller.scrollTop]] ãæž¡ãããŸã\n */\n top: number;\n\n /**\n * [[Scroller.scrollLeft]] ãæž¡ãããŸã\n */\n left: number;\n\n /**\n * [[Scroller.scrollBottom]] ãæž¡ãããŸã\n */\n bottom: number;\n\n /**\n * [[Scroller.scrollRight]] ãæž¡ãããŸã\n */\n right: number;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®è»žãæž¡ãããŸãã\n * æãã¹ã¯ããŒã«ãçºçããéã¯ãxãyã®ãã¡ç§»åéã倧ãããã®ãèªåå€å®ãããŠæž¡ãããŸãã\n * ã©ã¡ããåãç§»åéã§ãã£ãå Žåã¯[[Scroller.baseAxis]]ã®èšå®å€ãæž¡ãããŸãã\n */\n axis: ScrollAxis;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®æ¹åãæž¡ãããŸãã\n * æãã¹ã¯ããŒã«ãçºçããéã¯ãxãyã®ãã¡ç§»åéã倧ãããã®ãèªåå€å®ãããŠæž¡ãããŸãã\n * ã©ã¡ããåãç§»åéã§ãã£ãå Žåã¯[[Scroller.baseAxis]]ã®èšå®å€ãæž¡ãããŸãã\n */\n direction: ScrollDirection;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®æ°Žå¹³æ¹åãæž¡ãããŸãã\n */\n directionX: ScrollXDirection;\n\n /**\n * çºçããã¹ã¯ããŒã«ã®åçŽæ¹åãæž¡ãããŸãã\n */\n directionY: ScrollYDirection;\n\n // tick amount at element.on('scroll') detect\n\n /**\n * [[Scroller.on]]('scroll')æã®ååããã®æ°Žå¹³ç§»åéãæž¡ãããŸãã\n */\n tickedX: number;\n\n /**\n * [[Scroller.on]]('scroll')æã®ååããã®åçŽç§»åéãæž¡ãããŸãã\n */\n tickedY: number;\n\n /**\n * [[Scroller.on]]('scrollStart')æããã®åèšæ°Žå¹³ç§»åéãæž¡ãããŸãã\n */\n totalX: number;\n\n /**\n * [[Scroller.on]]('scrollStart')æããã®åèšåçŽç§»åéãæž¡ãããŸãã\n */\n totalY: number;\n}\n\n/**\n * Scrollerã¯èšå®ãããElementã®ã¹ã¯ããŒã«éå§ãtickãçµäºãæ€ç¥ã\n * ã€ãã³ããéç¥ããŸãã\n * ãããã®ã€ãã³ãã賌èªããäºã§ã¹ã¯ããŒã«éãç§»åæ¹åãæ€ç¥å¯èœã§ãã\n */\nexport interface ScrollerScrollEventMap {\n /**\n * ã¹ã¯ããŒã«ã®éå§æã«çºçããŸãã\n */\n scrollStart: ScrollerPayload;\n\n /**\n * æ¯ã¹ã¯ããŒã«æ€ç¥æã«çºçããŸãã\n */\n scroll: ScrollerPayload;\n\n /**\n * ã¹ã¯ããŒã«ã®çµäºæã«çºçããŸãã\n */\n scrollEnd: ScrollerPayload;\n}\n\n/**\n * Scrollerã«çºçããã€ãã³ãã®å
šãŠã§ãã\n */\nexport interface ScrollerEventMap extends ScrollerScrollEventMap {\n /**\n * Scrollerãå©çšå¯èœã«ãªã£ãæïŒElementãèšå®ãããŠåæåãå®äºããïŒã«çºçããŸãã\n */\n ready: void;\n\n /**\n * [[Scroller.state]]ã倿Žãããæã«çºçããŸãã\n */\n changeState: ScrollerState;\n\n /**\n * [[Scroller.el]]ã®ãµã€ãºå€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n resize: { width: number; height: number };\n\n /**\n * [[Scroller.lastAxis]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeAxis: ScrollAxis;\n\n /**\n * [[Scroller.lastDirection]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeLastDirection: ScrollDirection;\n\n /**\n * [[Scroller.lastYDirection]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeLastYDirection: ScrollYDirection;\n\n /**\n * [[Scroller.lastXDirection]]ã®å€æŽãæ€ç¥ããéã«çºçããŸãã\n */\n changeLastXDirection: ScrollXDirection;\n}\n\n/**\n * Scrollerã®ç¶æ
ã瀺ããŸãã\n */\n// eslint-disable-next-line no-shadow\nexport enum ScrollerState {\n /**\n * ScrollerãåæåãããŠããªãïŒElementãèšå®ãããŠããªãïŒç¶æ
ã瀺ããŸãã\n */\n Pending = 'pending',\n\n /**\n * ScrollerãåæåãããŠãããã[[Scroller.el]]ã®ãªãµã€ãºãã¹ã¯ããŒã«ã®ã€ãã³ãç£èŠãåäœããŠããªãç¶æ
ã瀺ããŸãã\n */\n Ready = 'ready',\n\n /**\n * ScrollerãåæåãããŠããŠã[[Scroller.el]]ã®ãªãµã€ãºãã¹ã¯ããŒã«ã®ã€ãã³ãç£èŠãåäœããŠããç¶æ
ã瀺ããŸãã\n */\n Running = 'running',\n\n /**\n * [[Scroller.destroy]]ãå®è¡ãããScrollerãå©çšäžå¯ã§ããç¶æ
ã瀺ããŸãã\n */\n Destroyed = 'destroyed',\n}\n\n/**\n * Scrollerã¯ã©ã¹ã®ç¶æ
ãç£èŠïŒåæãããªããžã§ã¯ãã\n * ä¿æãã¹ãããããã£äžèЧã§ãã\n * åã
ã®ããããã£åã¯ãååã®Scrollerã¯ã©ã¹ã®ããããã£ãåç
§ããŠäžãã\n */\nexport interface ScrollerObserver {\n state: ScrollerState;\n isPending: boolean;\n isReady: boolean;\n isRunning: boolean;\n isDestroyed: boolean;\n scrollEnabled: boolean;\n containerWidth: number;\n containerHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n scrollableX: boolean;\n scrollableY: boolean;\n scrollTop: number;\n scrollLeft: number;\n scrollRight: number;\n scrollBottom: number;\n lastAxis: ScrollAxis;\n lastDirection: ScrollDirection;\n lastYDirection: ScrollYDirection;\n lastXDirection: ScrollXDirection;\n nowScrolling: boolean;\n}\n\n/**\n * Scrollerã¯ã©ã¹ã®ç¶æ
ãç£èŠïŒåæãããªããžã§ã¯ãã\n * ä¿æãã¹ãããããã£äžã®ããŒèЧã§ãã\n */\nexport type ScrollerObservableKeys = keyof ScrollerObserver;\nconst scrollerObservableKeys: ScrollerObservableKeys[] = [\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n 'scrollEnabled',\n 'containerWidth',\n 'containerHeight',\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n 'scrollTop',\n 'scrollLeft',\n 'scrollRight',\n 'scrollBottom',\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n 'nowScrolling',\n];\n\n/**\n * ã¹ã¯ããŒã«ã忢ãããããã®ãœãŒã¹ãªããžã§ã¯ã\n */\nexport type ScrollStopper = number | string | Record<string, unknown> | symbol;\n\n/**\n * ä»»æã®ElementïŒor HTML DocumentïŒã®ã¹ã¯ããŒã«ããµã€ãºå€æŽãç£èŠãããã®æ
å ±ãéç¥ããã¯ã©ã¹ã§ãã<br>\n * <a href=\"https://dadajam4.github.io/dadajam4/ev/classes/_ev_.ev.html\" target=\"_blank\">EV</a>ãç¶æ¿ããŠãããã€ãã³ãã®è³Œèª[[Scroller.on]]çã®ã€ã³ã¿ãŒãã§ãŒã¹ãå©çšãããã\n * [[Scroller.observe]]ã¡ãœãããå©çšããŸãã<br>\n * [[Scroller.on]]ã[[Scroller.once]]ã§è³Œèªå¯èœãªã€ãã³ãã«ã€ããŠã¯[[ScrollerEventMap]]ãåç
§ããŠãã ããã\n */\nexport class Scroller extends EV<ScrollerEventMap> {\n /**\n * Scrollerã¯ã©ã¹ã®ç¶æ
ãç£èŠïŒåæãããªããžã§ã¯ãã\n * ä¿æãã¹ãããããã£äžã®ããŒã®é
åã§ãã\n */\n static readonly scrollerObservableKeys = scrollerObservableKeys;\n\n /**\n * Scrollerã®ç¶æ
ã瀺ãenumå€ã§ãã\n * {@link ScrollerState}\n */\n static readonly States = ScrollerState;\n\n /**\n * ã¹ã¯ããŒã«ãæ€ç¥ããŠãããç§»åããªããªã£ãéã«ãäœmsåŸã«ã¹ã¯ããŒã«çµäºãšå€å®ãããã®ã€ã³ã¿ãŒãã«å€ã瀺ããŸãã\n * ããã©ã«ãã¯500ã§ãã\n */\n scrollingJudgeInterval = 500;\n\n /**\n * çžŠãæšªã®ã©ã¡ãã®ã¹ã¯ããŒã«ãåºæºãšãããã瀺ããŸãã\n * ããã©ã«ãã¯yã§ãã<br>\n * ãã®èšå®ã¯[[Scroller.toElement]]ã®ããã©ã«ãå€ã«ã圱é¿ããŸãã\n */\n baseAxis: ScrollAxis = 'y';\n\n /**\n * ã¹ã¯ããŒã«ç³»ã¡ãœãã[[Scroller.to]]çãå©çšããéã®ããã©ã«ãã®èšå®ã瀺ããŸãã\n */\n scrollSettingsDefaults: ScrollBaseSettings = { ...defaultBaseSettings };\n\n /**\n * [[Scroller.toElement]]ã®ããã©ã«ããªãã·ã§ã³ã®èšå®ã瀺ããŸãã\n */\n scrollToElementSettingsDefaults: ScrollerScrollToElementOptions = {\n ..._scrollToElementSettingsDefaults,\n };\n\n scrollSizeObserver?: ScrollSizeObserverSetting;\n\n /**\n * èšå®ãããElementèŠçŽ ã§ãã\n * åæåãå®äºããŠããªãæã«ã¯æ¬getterã¯undefinedãè¿åŽããäºã«æ³šæããŠãã ããã\n */\n get el() {\n return this._el;\n }\n\n /**\n * çŸåšã®ç¶æ
ã§ãã<br>\n * {@link ScrollerState}\n */\n get state(): ScrollerState {\n return this._state;\n }\n\n /**\n * æªåæåã§ããå Žåtrueã瀺ããŸãã\n */\n get isPending(): boolean {\n return this._state === ScrollerState.Pending;\n }\n\n /**\n * åæåæžã¿ïŒåæ¢ç¶æ
ã§ããå Žåtrueã瀺ããŸãã\n */\n get isReady(): boolean {\n return this._state === ScrollerState.Ready;\n }\n\n /**\n * åæåæžã¿ïŒåäœäžã§ããå Žåtrueã瀺ããŸãã\n */\n get isRunning(): boolean {\n return this._state === ScrollerState.Running;\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ãç Žæ£æžã¿ã§ããå Žåtrueã瀺ããŸãã\n */\n get isDestroyed(): boolean {\n return this._state === ScrollerState.Destroyed;\n }\n\n /**\n * ã¹ã¯ããŒã«ã®æå¹ç¶æ
ãååŸããŸã\n */\n get scrollEnabled(): boolean {\n return this._scrollStoppers.length === 0;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ ã®å¹
ã瀺ããŸãã\n */\n get containerWidth(): number {\n return this._containerWidth;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ ã®é«ãã瀺ããŸãã\n */\n get containerHeight(): number {\n return this._containerHeight;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ å
ã®ã³ã³ãã³ãã®å¹
ã瀺ããŸãã\n */\n get scrollWidth(): number {\n return this._scrollWidth;\n }\n\n /**\n * ã¹ã¯ããŒã«èŠçŽ å
ã®ã³ã³ãã³ãã®é«ãã瀺ããŸãã\n */\n get scrollHeight(): number {\n return this._scrollHeight;\n }\n\n /**\n * x軞ã«ã¹ã¯ããŒã«å¯èœãªå Žåtrueã瀺ããŸã\n */\n get scrollableX(): boolean {\n return this._scrollWidth > this._containerWidth;\n }\n\n /**\n * y軞ã«ã¹ã¯ããŒã«å¯èœãªå Žåtrueã瀺ããŸã\n */\n get scrollableY(): boolean {\n return this._scrollHeight > this._containerHeight;\n }\n\n /**\n * çŸåšã®äžèŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollTop(): number {\n return this._scrollTop;\n }\n\n set scrollTop(scrollTop: number) {\n if (!this.el) return;\n this.el.scrollTop = scrollTop;\n }\n\n /**\n * çŸåšã®å³èŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollRight(): number {\n return this._scrollRight;\n }\n\n set scrollRight(scrollRight: number) {\n if (!this.el) return;\n this.el.scrollLeft = this._scrollWidth - this._containerWidth - scrollRight;\n }\n\n /**\n * çŸåšã®äžèŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollBottom(): number {\n return this._scrollBottom;\n }\n\n set scrollBottom(scrollBottom: number) {\n if (!this.el) return;\n this.el.scrollTop =\n this._scrollHeight - this._containerHeight - scrollBottom;\n }\n\n /**\n * çŸåšã®å·ŠèŸºããã®ã¹ã¯ããŒã«éã瀺ããŸãã\n */\n get scrollLeft(): number {\n return this._scrollLeft;\n }\n\n set scrollLeft(scrollLeft: number) {\n if (!this.el) return;\n this.el.scrollLeft = scrollLeft;\n }\n\n /**\n * çŸåšã¹ã¯ããŒã«äžã§ããå Žåtrueã瀺ããŸãã\n */\n get nowScrolling(): boolean {\n return this._nowScrolling;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®è»žã瀺ããŸãã\n */\n get lastAxis(): ScrollAxis {\n return this._lastAxis;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®æ¹åã瀺ããŸãã\n */\n get lastDirection(): ScrollDirection {\n return this._lastDirection;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®åçŽæ¹åã瀺ããŸãã\n */\n get lastYDirection(): ScrollYDirection {\n return this._lastYDirection;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã®æ°Žå¹³æ¹åã瀺ããŸãã\n */\n get lastXDirection(): ScrollXDirection {\n return this._lastXDirection;\n }\n\n /**\n * æåŸã«æ€ç¥ããã¹ã¯ããŒã«ã«ããéç¥ããæ
å ±ã瀺ããŸãã\n */\n get lastPayload(): ScrollerPayload {\n return {\n top: this._scrollTop,\n left: this._scrollLeft,\n bottom: this._scrollBottom,\n right: this._scrollRight,\n axis: this._lastAxis,\n direction: this._lastDirection,\n directionX: this._lastXDirection,\n directionY: this._lastYDirection,\n tickedX: this._tickedX,\n tickedY: this._tickedY,\n totalX: this._lastTotalX,\n totalY: this._lastTotalY,\n };\n }\n\n private _el!: Element | null;\n\n private _eventTarget!: ScrollerEventTarget;\n\n private _isDocumentElement = false;\n\n private _isBodyElement = false;\n\n private _isRootElement = false;\n\n private _state: ScrollerState = ScrollerState.Pending;\n\n private _containerWidth = 0;\n\n private _containerHeight = 0;\n\n private _scrollWidth = 0;\n\n private _scrollHeight = 0;\n\n private _scrollTop = 0;\n\n private _scrollRight = 0;\n\n private _scrollBottom = 0;\n\n private _scrollLeft = 0;\n\n private _lastAxis: ScrollAxis;\n\n private _lastDirection: ScrollDirection;\n\n private _lastYDirection: ScrollYDirection = 'top';\n\n private _lastXDirection: ScrollXDirection = 'left';\n\n private _nowScrolling = false;\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _readyResolvers: Function[] = [];\n\n private _scrollingJudgeTimerId: number | null = null;\n\n private _startX = 0;\n\n private _startY = 0;\n\n private _tickedX = 0;\n\n private _tickedY = 0;\n\n private _lastTotalX = 0;\n\n private _lastTotalY = 0;\n\n private _scrollListener?: EventListener;\n\n private _resizeListener?: EventListener;\n\n private _resizeObserver?: ResizeObserver;\n\n private _scrollToResult: ScrollResult | null = null;\n\n private _observers: ScrollerObserver[] = [];\n\n private _scrollStoppers: ScrollStopper[] = [];\n\n private _scrollSizeObserverPollingId: number | null = null;\n\n private _scrollSizeObserverSuspended = false;\n\n private _visibilityListener: VisibilityStateListener;\n\n /**\n * Scrollerã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã\n * ã³ã³ããã¹ããšãªãElementããã®æç¹ã§æå®ãããåŠãã¯ä»»æã§ãã\n *\n * @param settingOrElementOrQueryString - ä»»æã§ãã{@link ScrollerSetting}ã ElementïŒor cssã¯ãšãªã»ã¬ã¯ã¿æååïŒãçŽæ¥æå®ããŸãããã®æç¹ã§Elementãæå®ããªãå Žåã¯ã[[setElement]]ãå®è¡ãããŸã§ã€ã³ã¹ã¿ã³ã¹ã¯åäœããŸããã\n */\n constructor(\n settingOrElementOrQueryString:\n | Partial<ScrollerSetting>\n | Element\n | string = {},\n ) {\n super();\n\n const convertedSetting: Partial<ScrollerSetting> =\n typeof settingOrElementOrQueryString === 'string' ||\n settingOrElementOrQueryString === null ||\n (IN_WINDOW && settingOrElementOrQueryString instanceof Element)\n ? (settingOrElementOrQueryString = {\n el: <Element | string>settingOrElementOrQueryString,\n })\n : (settingOrElementOrQueryString as Partial<ScrollerSetting>);\n\n if (convertedSetting.scrollingJudgeInterval !== undefined)\n this.scrollingJudgeInterval = convertedSetting.scrollingJudgeInterval;\n\n if (convertedSetting.baseAxis) this.baseAxis = convertedSetting.baseAxis;\n this._lastAxis = this.baseAxis;\n\n const { scrollSizeObserver } = convertedSetting;\n if (scrollSizeObserver) {\n this.scrollSizeObserver = {\n interval: 500,\n width: true,\n height: true,\n ...scrollSizeObserver,\n };\n }\n\n this._visibilityListener = () => {\n if (visibilityManager.isVisible) {\n this.update();\n if (this._scrollSizeObserverSuspended) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n }\n } else {\n this._scrollSizeObserverSuspended =\n this._scrollSizeObserverPollingId !== null;\n this._stopScrollSizeObserver();\n }\n };\n\n this._lastDirection = this._lastAxis === 'y' ? 'top' : 'left';\n\n // for SSR\n if (!IN_WINDOW) return;\n\n // Add Visibility Listener\n visibilityManager.change(this._visibilityListener);\n\n // Skip auto setup when missing scrolling element.\n this.setElement(convertedSetting.el);\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã«Elementãèšå®ããŸããç¹å¥ãªçç±ïŒSSRã®å©çšçïŒã«ããã³ã³ã¹ãã©ã¯ã¿ã§Elementãæå®ã§ããªãå Žåã\n * æ¬ã¡ãœãããå©çšããã©ãŠã¶ã³ã³ããã¹ãé
äžã§æ¬ã¡ãœãããå®è¡ããŠãã ããã\n * @param el - Elementããããã¯CSSã¯ãšãªã»ã¬ã¯ã¿æååãæå®ããŸãã\n */\n setElement(el?: Element | string | null) {\n if (el === null) return;\n if (!IN_WINDOW)\n logger.error('Element can be set only when it is under DOM context.');\n\n this.stop();\n\n let _el: Element | null;\n if (typeof el === 'string') {\n _el = document.querySelector(el);\n } else {\n _el = el || document.scrollingElement;\n }\n if (!_el) {\n const message = 'missing scrolling element';\n logger.error(message, el);\n throw new Error(message);\n }\n\n this._el = _el;\n this._isDocumentElement = isDocumentElement(_el);\n this._isBodyElement = isBodyElement(_el);\n this._isRootElement = this._isDocumentElement || this._isBodyElement;\n this._eventTarget =\n this._isDocumentElement || this._isBodyElement ? window : this._el;\n\n this._setup();\n }\n\n private _scrollToElementAdditionalOffset:\n | ScrollToElementAdditionalOffset\n | undefined;\n\n setScrollToElementAdditionalOffset(\n offset: ScrollToElementAdditionalOffset | undefined,\n ) {\n this._scrollToElementAdditionalOffset = offset;\n }\n\n deleteScrollToElementAdditionalOffset() {\n delete this._scrollToElementAdditionalOffset;\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ãå®è¡å¯èœã«ãªã£ãéã«resolveãããPromiseã€ã³ã¹ã¿ã³ã¹ãè¿åŽããŸãã\n */\n ready(): Promise<void> {\n this._checkDestroyed();\n if (!this.isPending) return Promise.resolve();\n return new Promise((resolve) => this._readyResolvers.push(resolve));\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã®åäœãéå§ããŸããæ¬ã€ã³ã¹ã¿ã³ã¹ã¯Elementãèšå®ããåæåãããéã«èªåã§åäœãéå§ããŸããã\n * [[Scroller.stop]]ã¡ãœãããå©çšãåäœã忢ããåŸã«åéããå Žåã«æ¬ã¡ãœãããå©çšããŸãã\n */\n async start(): Promise<void> {\n this._checkDestroyed();\n if (this.isRunning) return;\n await this.ready();\n this._startListeners();\n this._setState(ScrollerState.Running);\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã®åäœïŒã¹ã¯ããŒã«ããªãµã€ãºã€ãã³ãã®æ€ç¥çïŒã忢ããŸãã\n * äœããã®çç±ã§åäœã忢ããããå Žåã«å©çšããŠãã ããã\n * æ¬ã¡ãœãããå®è¡åŸãã€ã³ã¹ã¿ã³ã¹å
ã®ç¶æ
ã¯ä¿æããããŸãŸã§ãã\n * å®å
šã«ã€ã³ã¹ã¿ã³ã¹ãç Žæ£ããããã«ã¯[[Scroller.destroy]]ãå©çšããŠãã ããã\n */\n stop(): void {\n this._checkDestroyed();\n if (!this.isRunning) return;\n this._stopListeners();\n this._setState(ScrollerState.Ready);\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹ã®åäœã忢ããå
éšæ
å ±ãå®å
šã«ç Žæ£ããŸãã\n * ããã«äŒŽããã¹ã¯ããŒã«äžã§ãã£ãå Žåã«ã¯ãã£ã³ã»ã«ããã以åŸã€ãã³ãéç¥ã¯å®å
šã«è¡ãããŸããã\n * ãŸã[[Scroller.start]]ã¡ãœããã§ã®åå©çšãäžå¯ãšãªããŸãã\n * æ¬ã€ã³ã¹ã¿ã³ã¹ã®å©çšãå®å
šã«åæ¢ããå Žåã«å¿
ãå®è¡ããå©çšåŽã®ãªããžã§ã¯ãçã«ãããŠæ¬ã€ã³ã¹ã¿ã³ã¹ãžã®åç
§ãå®å
šã«åé€ããŠãã ããã\n * æ¬ã¡ãœããã¯SPAçã§ã®ãµãŒãã¹ã«ãããŠã¯æèçã«å®è¡ããäºãåŒ·ãæšå¥šããŸãã\n */\n destroy() {\n if (this.isDestroyed) return;\n this.stop();\n this.cancel();\n this._readyResolvers = [];\n this._scrollStoppers = [];\n this._scrollEnable();\n this._observers = [];\n visibilityManager.remove(this._visibilityListener);\n\n delete (this as any)._el;\n delete (this as any)._eventTarget;\n delete this._scrollListener;\n delete this._resizeListener;\n delete (this as any)._resizeObserver;\n delete (this as any)._scrollToResult;\n delete (this as any)._visibilityListener;\n\n this.deleteScrollToElementAdditionalOffset();\n this._setState(ScrollerState.Destroyed);\n this.offAll();\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹å
éšã®ã¹ã¯ããŒã«éããElementã®ãµã€ãºã匷å¶çã«æŽæ°ããŸãã\n * åºæ¬çã«å©çšãå¿
èŠãªã±ãŒã¹ã¯ãããŸããããäœããã®çç±ã§æŽæ°ãããªã¬ãŒãããå Žåã«å©çšããŸãã\n */\n update(): void {\n this._update();\n }\n\n /**\n * ã€ã³ã¹ã¿ã³ã¹å
ã®æ
å ±ãjsonãªããžã§ã¯ããšããŠè¿åŽããŸãã\n * æ
å ±ã®è©³çްã¯[[ScrollerObserver]]ãåç
§ããŠãã ããã\n */\n toJSON(): ScrollerObserver {\n const json: Partial<ScrollerObserver> = {};\n for (const key of scrollerObservableKeys) {\n json[key] = this[key] as any;\n }\n return <ScrollerObserver>json;\n }\n\n /**\n * [[Scroller.toJSON]]ã®æ
å ±ãæååãšããŠè¿åŽããŸãã\n */\n toString(): string {\n return JSON.stringify(this.toJSON());\n }\n\n /**\n * æ¬ã€ã³ã¹ã¿ã³ã¹ã®æ
å ±ã賌èªããããã®ãªããžã§ã¯ããèšå®ããäºã§ã\n * ã€ã³ã¹ã¿ã³ã¹ã®å
éšæ
å ±ã倿Žããã床ã«ãã©ã¡ãŒã¿ãåæãããŸãã\n * èšå®ãããªããžã§ã¯ãã¯[[ScrollerObserver]]ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæºãããŠããã°å
容ã¯åããŸããã\n * æ¬æ©èœã«ããåæãããæ¹æ³ã¯åçŽã«ãªããžã§ã¯ãããããã£ãžã®å€æ°ä»£å
¥ã§ãã\n * åŸã£ãŠå¯Ÿè±¡ãšãªãããããã£ãgetterãšããŠå®è£
ïŒEx: Vue computedçããïŒããŠããäºã«ããã\n * åæãåãåããªããžã§ã¯ãåŽã§ãã©ã¡ãŒã¿å€æŽåŸã®åäœããªã¢ã¯ãã£ãã«å®è£
å¯èœã§ãã\n * @param observer - åæãããããªããžã§ã¯ã\n * @returns åæã忢ããããã®ã¡ãœãã\n */\n observe(observer: ScrollerObserver): () => void {\n if (!this._observers.includes(observer)) {\n this._observers.push(observer);\n }\n this._syncToObserver(observer);\n const unobserve = () => {\n this.unobserve(observer);\n };\n return unobserve;\n }\n\n /**\n * [[Scroller.observe]]ã§ãã©ã¡ãŒã¿åæäžã®ãªããžã§ã¯ãã忢ããŸãã\n * [[Scroller.destroy]]å®è¡æã«ããåæäžã®ãªããžã§ã¯ãã¯å
šåæ¢ãããŸãããdestroyåã«ä»»æã®ã¿ã€ãã³ã°ã§åæ¢ãããå Žå\n * æ¬ã¡ãœãããå©çšããŸãã\n * @param observer - åæäžã®ãªããžã§ã¯ã\n */\n unobserve(observer: ScrollerObserver) {\n const index = this._observers.indexOf(observer);\n if (index !== -1) {\n this._observers.splice(index, 1);\n }\n }\n\n /**\n * ã¹ã¯ããŒã«äžã§ãã£ãå Žåãã¹ã¯ããŒã«ããã£ã³ã»ã«ããŸãã\n */\n cancel() {\n if (!this._scrollToResult) return;\n this._scrollToResult.cancel();\n this._clearScrollToResult();\n }\n\n /**\n * x, yã®å·®åpxãæå®ãã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollBy]]ãåç
§ããŠãã ããã\n * @param diffX - 暪移åé\n * @param diffY - 瞊移åé\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n by(\n diffX: number,\n diffY: number,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollBy(diffX, diffY, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * æå®ã®åº§æšãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollTo]]ãåç
§ããŠãã ããã\n * @param scrollPosition - 座æš\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n to(\n scrollPosition: Partial<ScrollPosition>,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollTo(scrollPosition, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * æå®ã®èŠçŽ ã®äœçœ®ãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToElement]]ãåç
§ããŠãã ããã\n * ãªãã·ã§ã³ã®x, yãæªèšå®ã§ãã£ãå Žåã[[Scroller.baseAxis]]ã«ããèªåèšå®ãããŸãã\n * @param target - ã¹ã¯ããŒã«å
ã®èŠçŽ \n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toElement(\n target: ScrollToElementTarget,\n options?: ScrollerScrollToElementOptions,\n ) {\n const merged = this._createMergedScrollToElementOptions(options);\n if (merged.x === undefined) merged.x = this.baseAxis === 'x';\n if (merged.y === undefined) merged.y = this.baseAxis === 'y';\n\n return this._setScrollToResult(scrollToElement(target, merged));\n }\n\n /**\n * æå®ã®èŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToSide]]ãåç
§ããŠãã ããã\n * @param targets - ã¹ã¯ããŒã«å
\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toSide(\n targets: ScrollToSideTargets,\n options?: ScrollerScrollOptions,\n ): ScrollResult {\n return this._setScrollToResult(\n scrollToSide(targets, this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * äžèŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToTop]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å³èŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToRight]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toRight(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRight(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * äžèŸºãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToBottom]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * 巊蟺ãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToLeft]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toLeft(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeft(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å·Šäžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToLeftTop]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toLeftTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å·Šäžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToLeftBottom]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toLeftBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToLeftBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å³äžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToRightTop]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toRightTop(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightTop(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * å³äžã³ãŒããŒãžã¹ã¯ããŒã«ããŸãã\n * ã¡ãœããããã©ã¡ãŒã¿ã®è©³çްã¯[[scrollToRightBottom]]ãåç
§ããŠãã ããã\n * @param options - ã¹ã¯ããŒã«ãªãã·ã§ã³\n */\n toRightBottom(options?: ScrollerScrollOptions) {\n return this._setScrollToResult(\n scrollToRightBottom(this._createMergedScrollOptions(options)),\n );\n }\n\n /**\n * ã¹ã¯ããŒã«ã®åæ¢ãèŠæ±ããŸãã\n * @param stopper - åæ¢èŠæ±ãœãŒã¹\n */\n pushScrollStopper(stopper: ScrollStopper) {\n if (!this._scrollStoppers.includes(stopper)) {\n this._scrollStoppers.push(stopper);\n if (this._scrollStoppers.length === 1) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n return () => {\n this.removeScrollStopper(stopper);\n };\n }\n\n /**\n * ã¹ã¯ããŒã«ã®åæ¢èŠæ±ãè§£é€ããŸãã<br>\n * å¥ã®ããã»ã¹ã«ããç°ãªã[[ScrollStopper]]ãç»é²ãããŠããå Žåã\n * ã¹ã¯ããŒã«ã¯åéãããªãäºã«æ³šæããŠãã ããã\n * @param stopper - åæ¢èŠæ±ãœãŒã¹\n */\n removeScrollStopper(stopper: ScrollStopper) {\n const index = this._scrollStoppers.indexOf(stopper);\n if (index !== -1) {\n this._scrollStoppers.splice(index, 1);\n if (this._scrollStoppers.length === 0) {\n this._updateScrollable();\n this._syncToObservers(['scrollEnabled']);\n }\n }\n }\n\n private async _setup(): Promise<void> {\n this._updateScrollable();\n this._update();\n this._setState(ScrollerState.Ready);\n this.start();\n this.emit('ready', undefined);\n this._readyResolvers.forEach((resolve) => resolve());\n this._readyResolvers = [];\n }\n\n private _setState(state: ScrollerState): void {\n if (this._state !== state) {\n this._state = state;\n this._syncToObservers([\n 'state',\n 'isPending',\n 'isReady',\n 'isRunning',\n 'isDestroyed',\n ]);\n this.emit('changeState', state);\n }\n }\n\n private _checkDestroyed(): void {\n if (this.isDestroyed) {\n const message = 'already destroyed.';\n logger.error(message);\n throw new Error(message);\n }\n }\n\n private _update(width?: number, height?: number): void {\n this._updateContainerSize(width, height);\n this._updateScrollSize();\n this._updateScrollPositions();\n }\n\n private _updateContainerSize(width?: number, height?: number): void {\n const { el, _isBodyElement } = this;\n if (width === undefined) {\n if (!el) return;\n width = _isBodyElement\n ? (document.documentElement as HTMLElement).clientWidth\n : el.clientWidth;\n }\n\n if (height === undefined) {\n if (!el) return;\n height = _isBodyElement\n ? (document.documentElement as HTMLElement).clientHeight\n : el.clientHeight;\n }\n\n const { _containerWidth, _containerHeight } = this;\n this._containerWidth = width;\n this._containerHeight = height;\n if (width !== _containerWidth || height !== _containerHeight) {\n this._syncToObservers([\n 'containerWidth',\n 'containerHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n this.emit('resize', { width, height });\n }\n }\n\n private _updateScrollSize(): void {\n const { el, _scrollWidth, _scrollHeight } = this;\n if (!el) return;\n this._scrollWidth = el.scrollWidth;\n this._scrollHeight = el.scrollHeight;\n if (\n _scrollWidth !== this._scrollWidth ||\n _scrollHeight !== this._scrollHeight\n ) {\n this._syncToObservers([\n 'scrollWidth',\n 'scrollHeight',\n 'scrollableX',\n 'scrollableY',\n ]);\n }\n }\n\n private _startScrollSizeObserver() {\n if (!IN_WINDOW) return;\n\n this._stopScrollSizeObserver();\n\n if (this.scrollSizeObserver) {\n this._scrollSizeObserverPollingId = window.setInterval(() => {\n if (!this.scrollSizeObserver || this.isDestroyed) {\n this._stopScrollSizeObserver();\n return;\n }\n\n this._updateScrollSize();\n }, this.scrollSizeObserver.interval);\n }\n }\n\n private _stopScrollSizeObserver() {\n if (this._scrollSizeObserverPollingId !== null) {\n clearInterval(this._scrollSizeObserverPollingId);\n this._scrollSizeObserverPollingId = null;\n }\n }\n\n private _updateScrollPositions(): void {\n if (!this.el) return;\n this._scrollTop = this.el.scrollTop;\n this._scrollLeft = this.el.scrollLeft;\n\n // advanced values\n this._scrollBottom =\n this._scrollHeight - this._scrollTop - this._containerHeight;\n this._scrollRight =\n this._scrollWidth - this._scrollLeft - this._containerWidth;\n\n this._syncToObservers([\n 'scrollTop',\n 'scrollRight',\n 'scrollBottom',\n 'scrollLeft',\n ]);\n }\n\n private _startListeners() {\n this._stopListeners();\n\n this._scrollListener = () => {\n this._onScroll();\n };\n this._eventTarget.addEventListener('scroll', this._scrollListener, false);\n\n if (this._isRootElement) {\n this._resizeListener = () => {\n this._onResize();\n };\n window.addEventListener('resize', this._resizeListener, false);\n } else {\n this._resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this._onResize(width, height);\n }\n });\n this._el && this._resizeObserver.observe(this._el);\n }\n\n if (visibilityManager.isVisible) {\n this._scrollSizeObserverSuspended = false;\n this._startScrollSizeObserver();\n } else {\n this._scrollSizeObserverSuspended = true;\n }\n }\n\n private _stopListeners() {\n if (this._scrollListener) {\n this._eventTarget.removeEventListener(\n 'scroll',\n this._scrollListener,\n false,\n );\n delete this._scrollListener;\n }\n\n if (this._resizeListener) {\n if (this._isDocumentElement) {\n window.removeEventListener('resize', this._resizeListener, false);\n delete this._resizeListener;\n }\n }\n\n if (this._resizeObserver && this._el) {\n this._resizeObserver.unobserve(this._el);\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n }\n\n private _clearScrollingJudgeTimer() {\n if (this._scrollingJudgeTimerId !== null) {\n clearTimeout(this._scrollingJudgeTimerId);\n this._scrollingJudgeTimerId = null;\n }\n }\n\n private _onResize(width?: number, height?: number) {\n this._update(width, height);\n }\n\n private _triggerScrollTick(event: keyof ScrollerScrollEventMap): void {\n const { _nowScrolling } = this;\n\n if (event === 'scrollStart') {\n this._startX = this._scrollLeft;\n this._startY = this._scrollTop;\n this._lastTotalX = 0;\n this._lastTotalY = 0;\n this._nowScrolling = true;\n } else if (event === 'scrollEnd') {\n this._nowScrolling = false;\n }\n\n if (_nowScrolling !== this._nowScrolling) {\n this._syncToObservers('nowScrolling');\n }\n this.emit(event, this.lastPayload);\n }\n\n private _onScroll() {\n if (!this.scrollEnabled && this._el) {\n this._el.scrollLeft = this._scrollLeft;\n this._el.scrollTop = this._scrollTop;\n return;\n }\n\n // remember before values\n const {\n _scrollTop,\n _scrollLeft,\n _lastAxis,\n _lastDirection,\n _lastXDirection,\n _lastYDirection,\n } = this;\n\n // ,,,and next update values\n this._updateScrollPositions();\n\n // calculate scrolled amount at (ticked time)\n const tickedX = this._scrollLeft - _scrollLeft;\n const tickedY = this._scrollTop - _scrollTop;\n this._tickedX = tickedX;\n this._tickedY = tickedY;\n\n // update axis\n if (tickedX === tickedY) {\n this._lastAxis = this.baseAxis;\n } else {\n this._lastAxis = Math.abs(tickedX) > Math.abs(tickedY) ? 'x' : 'y';\n }\n\n // update directions\n if (_scrollTop < this._scrollTop) {\n this._lastYDirection = 'bottom';\n } else if (_scrollTop > this._scrollTop) {\n this._lastYDirection = 'top';\n }\n\n if (_scrollLeft < this._scrollLeft) {\n this._lastXDirection = 'right';\n } else if (_scrollLeft > this._scrollLeft) {\n this._lastXDirection = 'left';\n }\n\n this._lastDirection =\n this._lastAxis === 'y' ? this._lastYDirection : this._lastXDirection;\n\n // judge scroll end by before axis and directions\n const axisIsChanged = this._lastAxis !== _lastAxis;\n const lastXDirectionIsChanged = this._lastXDirection !== _lastXDirection;\n const lastYDirectionIsChanged = this._lastYDirection !== _lastYDirection;\n const lastDirectionIsChanged = this._lastDirection !== _lastDirection;\n\n if (axisIsChanged) {\n this.emit('changeAxis', this._lastAxis);\n }\n\n if (lastXDirectionIsChanged) {\n this.emit('changeLastXDirection', this._lastXDirection);\n }\n\n if (lastYDirectionIsChanged) {\n this.emit('changeLastYDirection', this._lastYDirection);\n }\n\n if (lastDirectionIsChanged) {\n this.emit('changeLastDirection', this._lastDirection);\n }\n\n if (\n axisIsChanged ||\n lastXDirectionIsChanged ||\n lastYDirectionIsChanged ||\n lastDirectionIsChanged\n ) {\n this._syncToObservers([\n 'lastAxis',\n 'lastDirection',\n 'lastYDirection',\n 'lastXDirection',\n ]);\n }\n\n if (this._nowScrolling) {\n if (\n axisIsChanged ||\n (_lastAxis === 'y' && lastYDirectionIsChanged) ||\n (_lastAxis === 'x' && lastXDirectionIsChanged)\n ) {\n // emit scroll end & start(both)\n this._triggerScrollTick('scrollEnd');\n } else {\n // add scroll amounts\n this._lastTotalX = this._scrollLeft - this._startX;\n this._lastTotalY = this._scrollTop - this._startY;\n this._triggerScrollTick('scroll');\n }\n }\n\n // judge scroll start\n if (!this._nowScrolling) {\n this._updateScrollSize();\n this._triggerScrollTick('scrollStart');\n }\n\n this._clearScrollingJudgeTimer();\n this._scrollingJudgeTimerId = window.setTimeout(() => {\n this._triggerScrollTick('scrollEnd');\n }, this.scrollingJudgeInterval);\n }\n\n private _syncToObserver(\n observer: ScrollerObserver,\n keys: ScrollerObservableKeys[] = scrollerObservableKeys,\n ) {\n for (const key of keys) {\n (observer as any)[key] = this[key];\n }\n }\n\n private _syncToObservers(\n keys: ScrollerObservableKeys | ScrollerObservableKeys[],\n ) {\n if (this._observers.length === 0) return;\n keys = typeof keys === 'string' ? [keys] : keys;\n for (const observer of this._observers) {\n this._syncToObserver(observer, keys);\n }\n }\n\n private _checkElement() {\n const { _el } = this;\n if (!_el) {\n const message = 'missing element';\n logger.error(message);\n throw new Error(message);\n }\n return _el;\n }\n\n private _createMergedScrollOptions(\n source?: ScrollerScrollOptions,\n ): ScrollOptions {\n const el = this._checkElement();\n const merged: ScrollOptions = {\n container: el,\n ...this.scrollSettingsDefaults,\n ...source,\n };\n return merged;\n }\n\n private _createMergedScrollToElementOptions(\n source?: ScrollerScrollToElementOptions,\n ): ScrollToElementOptions {\n const el = this._checkElement();\n const merged: ScrollToElementOptions = {\n container: el,\n ...this.scrollToElementSettingsDefaults,\n ...source,\n };\n let { _scrollToElementAdditionalOffset: additionalOffset } = this;\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'function') {\n additionalOffset = additionalOffset(this);\n }\n if (!additionalOffset) return merged;\n if (typeof additionalOffset === 'number') {\n additionalOffset = {\n x: additionalOffset,\n y: additionalOffset,\n };\n }\n let { offset } = merged;\n if (!offset) {\n merged.offset = additionalOffset;\n return merged;\n }\n if (typeof offset === 'number') {\n offset = {\n x: offset,\n y: offset,\n };\n }\n\n offset.x = (offset.x || 0) + (additionalOffset.x || 0);\n offset.y = (offset.y || 0) + (additionalOffset.y || 0);\n merged.offset = offset;\n return merged;\n }\n\n private _clearScrollToResult() {\n if (!this._scrollToResult) return;\n this._scrollToResult = null;\n }\n\n private _setScrollToResult(result: ScrollResult): ScrollResult {\n this._scrollToResult = result;\n result.promise.then(() => {\n this._clearScrollToResult();\n });\n return result;\n }\n\n private _updateScrollable() {\n if (this.scrollEnabled) {\n this._scrollEnable();\n } else {\n this._scrollDisable();\n }\n }\n\n private _scrollEnable() {\n enableScroll(this._checkElement());\n }\n\n private _scrollDisable() {\n const el = this._checkElement();\n this.cancel();\n disableScroll(el);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fastkit/scroller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Library for controlling the scrolling state of DOM elements.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fastkit",
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
],
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"bezier-easing": "^2.1.0",
|
|
44
|
+
"@fastkit/helpers": "^0.15.0",
|
|
44
45
|
"@fastkit/ev": "^0.14.1",
|
|
45
|
-
"@fastkit/
|
|
46
|
-
"@fastkit/
|
|
47
|
-
"@fastkit/visibility": "^0.14.5"
|
|
46
|
+
"@fastkit/tiny-logger": "^0.15.0",
|
|
47
|
+
"@fastkit/visibility": "^0.15.0"
|
|
48
48
|
},
|
|
49
49
|
"buildOptions": {
|
|
50
50
|
"name": "Scroller"
|