lenis 1.3.18-dev.0 → 1.3.18
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 +24 -19
- package/dist/lenis-react.d.ts +6 -0
- package/dist/lenis-react.mjs +10 -1
- package/dist/lenis-react.mjs.map +1 -1
- package/dist/lenis-snap.js +6 -2
- package/dist/lenis-snap.js.map +1 -1
- package/dist/lenis-snap.min.js +1 -1
- package/dist/lenis-snap.min.js.map +1 -1
- package/dist/lenis-snap.mjs +6 -2
- package/dist/lenis-snap.mjs.map +1 -1
- package/dist/lenis-vue.mjs.map +1 -1
- package/dist/lenis.css +1 -1
- package/dist/lenis.d.ts +9 -4
- package/dist/lenis.js +55 -56
- package/dist/lenis.js.map +1 -1
- package/dist/lenis.min.js +1 -1
- package/dist/lenis.min.js.map +1 -1
- package/dist/lenis.mjs +55 -56
- package/dist/lenis.mjs.map +1 -1
- package/package.json +1 -1
package/dist/lenis-vue.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/vue/src/provider.ts","../packages/vue/src/store.ts","../packages/vue/src/use-lenis.ts"],"sourcesContent":["// import Tempus from '@darkroom.engineering/tempus'\nimport Lenis, { type ScrollCallback } from 'lenis'\nimport type {\n HTMLAttributes,\n InjectionKey,\n Plugin,\n PropType,\n ShallowRef,\n ToRefs,\n} from 'vue'\nimport {\n defineComponent,\n h,\n onWatcherCleanup,\n provide,\n reactive,\n ref,\n shallowRef,\n watch,\n} from 'vue'\nimport { globalAddCallback, globalLenis, globalRemoveCallback } from './store'\n\nexport const LenisSymbol: InjectionKey<ShallowRef<Lenis | undefined>> =\n Symbol('LenisContext')\nexport const AddCallbackSymbol: InjectionKey<\n ((callback: ScrollCallback, priority: number) => void) | undefined\n> = Symbol('AddCallback')\nexport const RemoveCallbackSymbol: InjectionKey<\n ((callback: ScrollCallback) => void) | undefined\n> = Symbol('RemoveCallback')\n\nexport type LenisExposed = {\n wrapper?: HTMLDivElement\n content?: HTMLDivElement\n lenis?: Lenis\n}\n\nconst VueLenisImpl = defineComponent({\n name: 'VueLenis',\n props: {\n root: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n autoRaf: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n options: {\n type: Object as PropType<ConstructorParameters<typeof Lenis>[0]>,\n default: () => ({}),\n },\n props: {\n type: Object as PropType<HTMLAttributes>,\n default: () => ({}),\n },\n },\n setup(props, { slots, expose }) {\n const lenisRef = shallowRef<Lenis>()\n // const tempusCleanupRef = shallowRef<() => void>()\n const wrapper = ref<HTMLDivElement>()\n const content = ref<HTMLDivElement>()\n // Setup exposed properties\n expose<ToRefs<LenisExposed>>({\n lenis: lenisRef,\n wrapper,\n content,\n })\n\n // Sync options\n watch(\n [() => props.options, wrapper, content],\n () => {\n const isClient = typeof window !== 'undefined'\n\n if (!isClient) return\n\n if (!(props.root || (wrapper.value && content.value))) return\n\n lenisRef.value = new Lenis({\n ...props.options,\n ...(!props.root\n ? {\n wrapper: wrapper.value,\n content: content.value,\n }\n : {}),\n autoRaf: props.options?.autoRaf ?? props.autoRaf,\n })\n\n onWatcherCleanup(() => {\n lenisRef.value?.destroy()\n lenisRef.value = undefined\n })\n },\n { deep: true, immediate: true }\n )\n\n const callbacks = reactive<\n { callback: ScrollCallback; priority: number }[]\n >([])\n\n function addCallback(callback: ScrollCallback, priority: number) {\n callbacks.push({ callback, priority })\n callbacks.sort((a, b) => a.priority - b.priority)\n }\n\n function removeCallback(callback: ScrollCallback) {\n callbacks.splice(\n callbacks.findIndex((cb) => cb.callback === callback),\n 1\n )\n }\n\n const onScroll: ScrollCallback = (data) => {\n for (const { callback } of callbacks) {\n callback(data)\n }\n }\n\n watch(\n [lenisRef, () => props.root],\n ([lenis, root]) => {\n lenis?.on('scroll', onScroll)\n\n if (root) {\n globalLenis.value = lenis\n globalAddCallback.value = addCallback\n globalRemoveCallback.value = removeCallback\n\n onWatcherCleanup(() => {\n globalLenis.value = undefined\n globalAddCallback.value = undefined\n globalRemoveCallback.value = undefined\n })\n }\n },\n { immediate: true }\n )\n\n if (!props.root) {\n provide(LenisSymbol, lenisRef)\n provide(AddCallbackSymbol, addCallback)\n provide(RemoveCallbackSymbol, removeCallback)\n }\n\n return () => {\n if (props.root) {\n return slots.default?.()\n }\n return h('div', { ref: wrapper, ...props?.props }, [\n h('div', { ref: content }, slots.default?.()),\n ])\n }\n },\n})\n\nexport const VueLenis = VueLenisImpl as typeof VueLenisImpl & {\n new (): LenisExposed\n}\n\nexport const vueLenisPlugin: Plugin = (app) => {\n app.component('vue-lenis', VueLenis)\n // Setup a global provide to silence top level useLenis injection warning\n app.provide(LenisSymbol, shallowRef(undefined))\n app.provide(AddCallbackSymbol, undefined)\n app.provide(RemoveCallbackSymbol, undefined)\n}\n\n// @ts-expect-error\ndeclare module '@vue/runtime-core' {\n export interface GlobalComponents {\n 'vue-lenis': typeof VueLenis\n }\n}\n","import type Lenis from 'lenis'\nimport type { ScrollCallback } from 'lenis'\nimport { shallowRef } from 'vue'\n\nexport const globalLenis = shallowRef<Lenis>()\nexport const globalAddCallback =\n shallowRef<(callback: ScrollCallback, priority: number) => void>()\nexport const globalRemoveCallback =\n shallowRef<(callback: ScrollCallback) => void>()\n","import type { ScrollCallback } from 'lenis'\nimport { computed, inject, nextTick, onWatcherCleanup, watch } from 'vue'\nimport {\n AddCallbackSymbol,\n LenisSymbol,\n RemoveCallbackSymbol,\n} from './provider'\nimport { globalAddCallback, globalLenis, globalRemoveCallback } from './store'\n\nexport function useLenis(callback?: ScrollCallback, priority = 0) {\n const lenisInjection = inject(LenisSymbol)\n const addCallbackInjection = inject(AddCallbackSymbol)\n const removeCallbackInjection = inject(RemoveCallbackSymbol)\n\n const addCallback = computed(() =>\n addCallbackInjection ? addCallbackInjection : globalAddCallback.value\n )\n const removeCallback = computed(() =>\n removeCallbackInjection\n ? removeCallbackInjection\n : globalRemoveCallback.value\n )\n\n const lenis = computed(() =>\n lenisInjection?.value ? lenisInjection.value : globalLenis.value\n )\n\n if (typeof window !== 'undefined') {\n // Wait two ticks to make sure the lenis instance is mounted\n nextTick(() => {\n nextTick(() => {\n // @ts-expect-error - import.meta.env is available in vite and nuxt\n if (!lenis.value && import.meta.env.DEV) {\n console.warn(\n 'No lenis instance found, either mount a root lenis instance or wrap your component in a lenis provider'\n )\n }\n })\n })\n }\n\n watch(\n [lenis, addCallback, removeCallback],\n ([lenis, addCallback, removeCallback]) => {\n if (!(lenis && addCallback && removeCallback && callback)) return\n\n addCallback?.(callback, priority)\n callback?.(lenis!)\n\n onWatcherCleanup(() => {\n removeCallback?.(callback)\n })\n },\n {\n immediate: true,\n }\n )\n return lenis\n}\n"],"mappings":"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","names":["shallowRef","shallowRef","onWatcherCleanup","watch","watch","lenis","addCallback","removeCallback","onWatcherCleanup"]}
|
|
1
|
+
{"version":3,"sources":["../packages/vue/src/provider.ts","../packages/vue/src/store.ts","../packages/vue/src/use-lenis.ts"],"sourcesContent":["import Lenis, { type ScrollCallback } from 'lenis'\nimport type {\n HTMLAttributes,\n InjectionKey,\n Plugin,\n PropType,\n ShallowRef,\n ToRefs,\n} from 'vue'\nimport {\n defineComponent,\n h,\n onWatcherCleanup,\n provide,\n reactive,\n ref,\n shallowRef,\n watch,\n} from 'vue'\nimport { globalAddCallback, globalLenis, globalRemoveCallback } from './store'\n\nexport const LenisSymbol: InjectionKey<ShallowRef<Lenis | undefined>> =\n Symbol('LenisContext')\nexport const AddCallbackSymbol: InjectionKey<\n ((callback: ScrollCallback, priority: number) => void) | undefined\n> = Symbol('AddCallback')\nexport const RemoveCallbackSymbol: InjectionKey<\n ((callback: ScrollCallback) => void) | undefined\n> = Symbol('RemoveCallback')\n\nexport type LenisExposed = {\n wrapper?: HTMLDivElement\n content?: HTMLDivElement\n lenis?: Lenis\n}\n\nconst VueLenisImpl = defineComponent({\n name: 'VueLenis',\n props: {\n root: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n autoRaf: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n options: {\n type: Object as PropType<ConstructorParameters<typeof Lenis>[0]>,\n default: () => ({}),\n },\n props: {\n type: Object as PropType<HTMLAttributes>,\n default: () => ({}),\n },\n },\n setup(props, { slots, expose }) {\n const lenisRef = shallowRef<Lenis>()\n const wrapper = ref<HTMLDivElement>()\n const content = ref<HTMLDivElement>()\n // Setup exposed properties\n expose<ToRefs<LenisExposed>>({\n lenis: lenisRef,\n wrapper,\n content,\n })\n\n // Sync options\n watch(\n [() => props.options, wrapper, content],\n () => {\n const isClient = typeof window !== 'undefined'\n\n if (!isClient) return\n\n if (!(props.root || (wrapper.value && content.value))) return\n\n lenisRef.value = new Lenis({\n ...props.options,\n ...(!props.root\n ? {\n wrapper: wrapper.value,\n content: content.value,\n }\n : {}),\n autoRaf: props.options?.autoRaf ?? props.autoRaf,\n })\n\n onWatcherCleanup(() => {\n lenisRef.value?.destroy()\n lenisRef.value = undefined\n })\n },\n { deep: true, immediate: true }\n )\n\n const callbacks = reactive<\n { callback: ScrollCallback; priority: number }[]\n >([])\n\n function addCallback(callback: ScrollCallback, priority: number) {\n callbacks.push({ callback, priority })\n callbacks.sort((a, b) => a.priority - b.priority)\n }\n\n function removeCallback(callback: ScrollCallback) {\n callbacks.splice(\n callbacks.findIndex((cb) => cb.callback === callback),\n 1\n )\n }\n\n const onScroll: ScrollCallback = (data) => {\n for (const { callback } of callbacks) {\n callback(data)\n }\n }\n\n watch(\n [lenisRef, () => props.root],\n ([lenis, root]) => {\n lenis?.on('scroll', onScroll)\n\n if (root) {\n globalLenis.value = lenis\n globalAddCallback.value = addCallback\n globalRemoveCallback.value = removeCallback\n\n onWatcherCleanup(() => {\n globalLenis.value = undefined\n globalAddCallback.value = undefined\n globalRemoveCallback.value = undefined\n })\n }\n },\n { immediate: true }\n )\n\n if (!props.root) {\n provide(LenisSymbol, lenisRef)\n provide(AddCallbackSymbol, addCallback)\n provide(RemoveCallbackSymbol, removeCallback)\n }\n\n return () => {\n if (props.root) {\n return slots.default?.()\n }\n return h('div', { ref: wrapper, ...props?.props }, [\n h('div', { ref: content }, slots.default?.()),\n ])\n }\n },\n})\n\nexport const VueLenis = VueLenisImpl as typeof VueLenisImpl & {\n new (): LenisExposed\n}\n\nexport const vueLenisPlugin: Plugin = (app) => {\n app.component('vue-lenis', VueLenis)\n // Setup a global provide to silence top level useLenis injection warning\n app.provide(LenisSymbol, shallowRef(undefined))\n app.provide(AddCallbackSymbol, undefined)\n app.provide(RemoveCallbackSymbol, undefined)\n}\n\n// @ts-expect-error\ndeclare module '@vue/runtime-core' {\n export interface GlobalComponents {\n 'vue-lenis': typeof VueLenis\n }\n}\n","import type Lenis from 'lenis'\nimport type { ScrollCallback } from 'lenis'\nimport { shallowRef } from 'vue'\n\nexport const globalLenis = shallowRef<Lenis>()\nexport const globalAddCallback =\n shallowRef<(callback: ScrollCallback, priority: number) => void>()\nexport const globalRemoveCallback =\n shallowRef<(callback: ScrollCallback) => void>()\n","import type { ScrollCallback } from 'lenis'\nimport { computed, inject, nextTick, onWatcherCleanup, watch } from 'vue'\nimport {\n AddCallbackSymbol,\n LenisSymbol,\n RemoveCallbackSymbol,\n} from './provider'\nimport { globalAddCallback, globalLenis, globalRemoveCallback } from './store'\n\nexport function useLenis(callback?: ScrollCallback, priority = 0) {\n const lenisInjection = inject(LenisSymbol)\n const addCallbackInjection = inject(AddCallbackSymbol)\n const removeCallbackInjection = inject(RemoveCallbackSymbol)\n\n const addCallback = computed(() =>\n addCallbackInjection ? addCallbackInjection : globalAddCallback.value\n )\n const removeCallback = computed(() =>\n removeCallbackInjection\n ? removeCallbackInjection\n : globalRemoveCallback.value\n )\n\n const lenis = computed(() =>\n lenisInjection?.value ? lenisInjection.value : globalLenis.value\n )\n\n if (typeof window !== 'undefined') {\n // Wait two ticks to make sure the lenis instance is mounted\n nextTick(() => {\n nextTick(() => {\n // @ts-expect-error - import.meta.env is available in vite and nuxt\n if (!lenis.value && import.meta.env.DEV) {\n console.warn(\n 'No lenis instance found, either mount a root lenis instance or wrap your component in a lenis provider'\n )\n }\n })\n })\n }\n\n watch(\n [lenis, addCallback, removeCallback],\n ([lenis, addCallback, removeCallback]) => {\n if (!(lenis && addCallback && removeCallback && callback)) return\n\n addCallback?.(callback, priority)\n callback?.(lenis!)\n\n onWatcherCleanup(() => {\n removeCallback?.(callback)\n })\n },\n {\n immediate: true,\n }\n )\n return lenis\n}\n"],"mappings":"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","names":["shallowRef","shallowRef","onWatcherCleanup","watch","watch","lenis","addCallback","removeCallback","onWatcherCleanup"]}
|
package/dist/lenis.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}
|
|
1
|
+
html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch],.lenis [data-lenis-prevent-vertical],.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}
|
package/dist/lenis.d.ts
CHANGED
|
@@ -157,7 +157,7 @@ type LenisOptions = {
|
|
|
157
157
|
syncTouchLerp?: number;
|
|
158
158
|
/**
|
|
159
159
|
* Manage the the strength of `syncTouch` inertia
|
|
160
|
-
* @default
|
|
160
|
+
* @default 1.7
|
|
161
161
|
*/
|
|
162
162
|
touchInertiaExponent?: number;
|
|
163
163
|
/**
|
|
@@ -218,12 +218,12 @@ type LenisOptions = {
|
|
|
218
218
|
*/
|
|
219
219
|
overscroll?: boolean;
|
|
220
220
|
/**
|
|
221
|
-
* If `true`, Lenis will
|
|
221
|
+
* If `true`, Lenis will automatically run `requestAnimationFrame` loop
|
|
222
222
|
* @default false
|
|
223
223
|
*/
|
|
224
224
|
autoRaf?: boolean;
|
|
225
225
|
/**
|
|
226
|
-
* If `true`, Lenis will
|
|
226
|
+
* If `true`, Lenis will handle anchor links automatically
|
|
227
227
|
* @default false
|
|
228
228
|
*/
|
|
229
229
|
anchors?: boolean | ScrollToOptions;
|
|
@@ -255,6 +255,11 @@ type LenisOptions = {
|
|
|
255
255
|
declare global {
|
|
256
256
|
interface Window {
|
|
257
257
|
lenisVersion: string;
|
|
258
|
+
lenis: {
|
|
259
|
+
version?: string;
|
|
260
|
+
horizontal?: boolean;
|
|
261
|
+
snap?: boolean;
|
|
262
|
+
};
|
|
258
263
|
}
|
|
259
264
|
}
|
|
260
265
|
|
|
@@ -395,7 +400,7 @@ declare class Lenis {
|
|
|
395
400
|
lerp, duration, easing, onStart, onComplete, force, // scroll even if stopped
|
|
396
401
|
userData, }?: ScrollToOptions): void;
|
|
397
402
|
private preventNextNativeScrollEvent;
|
|
398
|
-
private
|
|
403
|
+
private hasNestedScroll;
|
|
399
404
|
/**
|
|
400
405
|
* The root element on which lenis is instanced
|
|
401
406
|
*/
|
package/dist/lenis.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// package.json
|
|
2
|
-
var version = "1.3.18
|
|
2
|
+
var version = "1.3.18";
|
|
3
3
|
|
|
4
4
|
// packages/core/src/maths.ts
|
|
5
5
|
function clamp(min, input, max) {
|
|
@@ -101,7 +101,7 @@ var Dimensions = class {
|
|
|
101
101
|
if (autoResize) {
|
|
102
102
|
this.debouncedResize = debounce(this.resize, debounceValue);
|
|
103
103
|
if (this.wrapper instanceof Window) {
|
|
104
|
-
window.addEventListener("resize", this.debouncedResize
|
|
104
|
+
window.addEventListener("resize", this.debouncedResize);
|
|
105
105
|
} else {
|
|
106
106
|
this.wrapperResizeObserver = new ResizeObserver(this.debouncedResize);
|
|
107
107
|
this.wrapperResizeObserver.observe(this.wrapper);
|
|
@@ -123,7 +123,7 @@ var Dimensions = class {
|
|
|
123
123
|
this.wrapperResizeObserver?.disconnect();
|
|
124
124
|
this.contentResizeObserver?.disconnect();
|
|
125
125
|
if (this.wrapper === window && this.debouncedResize) {
|
|
126
|
-
window.removeEventListener("resize", this.debouncedResize
|
|
126
|
+
window.removeEventListener("resize", this.debouncedResize);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
resize = () => {
|
|
@@ -214,7 +214,7 @@ var VirtualScroll = class {
|
|
|
214
214
|
constructor(element, options = { wheelMultiplier: 1, touchMultiplier: 1 }) {
|
|
215
215
|
this.element = element;
|
|
216
216
|
this.options = options;
|
|
217
|
-
window.addEventListener("resize", this.onWindowResize
|
|
217
|
+
window.addEventListener("resize", this.onWindowResize);
|
|
218
218
|
this.onWindowResize();
|
|
219
219
|
this.element.addEventListener("wheel", this.onWheel, listenerOptions);
|
|
220
220
|
this.element.addEventListener(
|
|
@@ -254,7 +254,7 @@ var VirtualScroll = class {
|
|
|
254
254
|
/** Remove all event listeners and clean up */
|
|
255
255
|
destroy() {
|
|
256
256
|
this.emitter.destroy();
|
|
257
|
-
window.removeEventListener("resize", this.onWindowResize
|
|
257
|
+
window.removeEventListener("resize", this.onWindowResize);
|
|
258
258
|
this.element.removeEventListener("wheel", this.onWheel, listenerOptions);
|
|
259
259
|
this.element.removeEventListener(
|
|
260
260
|
"touchstart",
|
|
@@ -429,6 +429,13 @@ var Lenis = class {
|
|
|
429
429
|
stopInertiaOnNavigate = false
|
|
430
430
|
} = {}) {
|
|
431
431
|
window.lenisVersion = version;
|
|
432
|
+
if (!window.lenis) {
|
|
433
|
+
window.lenis = {};
|
|
434
|
+
}
|
|
435
|
+
window.lenis.version = version;
|
|
436
|
+
if (orientation === "horizontal") {
|
|
437
|
+
window.lenis.horizontal = true;
|
|
438
|
+
}
|
|
432
439
|
if (!wrapper || wrapper === document.documentElement) {
|
|
433
440
|
wrapper = window;
|
|
434
441
|
}
|
|
@@ -467,21 +474,19 @@ var Lenis = class {
|
|
|
467
474
|
this.dimensions = new Dimensions(wrapper, content, { autoResize });
|
|
468
475
|
this.updateClassName();
|
|
469
476
|
this.targetScroll = this.animatedScroll = this.actualScroll;
|
|
470
|
-
this.options.wrapper.addEventListener("scroll", this.onNativeScroll
|
|
477
|
+
this.options.wrapper.addEventListener("scroll", this.onNativeScroll);
|
|
471
478
|
this.options.wrapper.addEventListener("scrollend", this.onScrollEnd, {
|
|
472
479
|
capture: true
|
|
473
480
|
});
|
|
474
481
|
if (this.options.anchors || this.options.stopInertiaOnNavigate) {
|
|
475
482
|
this.options.wrapper.addEventListener(
|
|
476
483
|
"click",
|
|
477
|
-
this.onClick
|
|
478
|
-
false
|
|
484
|
+
this.onClick
|
|
479
485
|
);
|
|
480
486
|
}
|
|
481
487
|
this.options.wrapper.addEventListener(
|
|
482
488
|
"pointerdown",
|
|
483
|
-
this.onPointerDown
|
|
484
|
-
false
|
|
489
|
+
this.onPointerDown
|
|
485
490
|
);
|
|
486
491
|
this.virtualScroll = new VirtualScroll(eventsTarget, {
|
|
487
492
|
touchMultiplier,
|
|
@@ -490,9 +495,7 @@ var Lenis = class {
|
|
|
490
495
|
this.virtualScroll.on("scroll", this.onVirtualScroll);
|
|
491
496
|
if (this.options.autoToggle) {
|
|
492
497
|
this.checkOverflow();
|
|
493
|
-
this.rootElement.addEventListener("transitionend", this.onTransitionEnd
|
|
494
|
-
passive: true
|
|
495
|
-
});
|
|
498
|
+
this.rootElement.addEventListener("transitionend", this.onTransitionEnd);
|
|
496
499
|
}
|
|
497
500
|
if (this.options.autoRaf) {
|
|
498
501
|
this._rafId = requestAnimationFrame(this.raf);
|
|
@@ -503,24 +506,18 @@ var Lenis = class {
|
|
|
503
506
|
*/
|
|
504
507
|
destroy() {
|
|
505
508
|
this.emitter.destroy();
|
|
506
|
-
this.options.wrapper.removeEventListener(
|
|
507
|
-
"scroll",
|
|
508
|
-
this.onNativeScroll,
|
|
509
|
-
false
|
|
510
|
-
);
|
|
509
|
+
this.options.wrapper.removeEventListener("scroll", this.onNativeScroll);
|
|
511
510
|
this.options.wrapper.removeEventListener("scrollend", this.onScrollEnd, {
|
|
512
511
|
capture: true
|
|
513
512
|
});
|
|
514
513
|
this.options.wrapper.removeEventListener(
|
|
515
514
|
"pointerdown",
|
|
516
|
-
this.onPointerDown
|
|
517
|
-
false
|
|
515
|
+
this.onPointerDown
|
|
518
516
|
);
|
|
519
517
|
if (this.options.anchors || this.options.stopInertiaOnNavigate) {
|
|
520
518
|
this.options.wrapper.removeEventListener(
|
|
521
519
|
"click",
|
|
522
|
-
this.onClick
|
|
523
|
-
false
|
|
520
|
+
this.onClick
|
|
524
521
|
);
|
|
525
522
|
}
|
|
526
523
|
this.virtualScroll.destroy();
|
|
@@ -632,8 +629,12 @@ var Lenis = class {
|
|
|
632
629
|
let composedPath = event.composedPath();
|
|
633
630
|
composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement));
|
|
634
631
|
const prevent = this.options.prevent;
|
|
632
|
+
const gestureOrientation = Math.abs(deltaX) >= Math.abs(deltaY) ? "horizontal" : "vertical";
|
|
635
633
|
if (composedPath.find(
|
|
636
|
-
(node) => node instanceof HTMLElement && (typeof prevent === "function" && prevent?.(node) || node.hasAttribute?.("data-lenis-prevent") || isTouch && node.hasAttribute?.("data-lenis-prevent-touch") || isWheel && node.hasAttribute?.("data-lenis-prevent-wheel") || this.options.allowNestedScroll && this.
|
|
634
|
+
(node) => node instanceof HTMLElement && (typeof prevent === "function" && prevent?.(node) || node.hasAttribute?.("data-lenis-prevent") || gestureOrientation === "vertical" && node.hasAttribute?.("data-lenis-prevent-vertical") || gestureOrientation === "horizontal" && node.hasAttribute?.("data-lenis-prevent-horizontal") || isTouch && node.hasAttribute?.("data-lenis-prevent-touch") || isWheel && node.hasAttribute?.("data-lenis-prevent-wheel") || this.options.allowNestedScroll && this.hasNestedScroll(node, {
|
|
635
|
+
deltaX,
|
|
636
|
+
deltaY
|
|
637
|
+
}))
|
|
637
638
|
))
|
|
638
639
|
return;
|
|
639
640
|
if (this.isStopped || this.isLocked) {
|
|
@@ -921,7 +922,7 @@ var Lenis = class {
|
|
|
921
922
|
this._preventNextNativeScrollEvent = false;
|
|
922
923
|
});
|
|
923
924
|
}
|
|
924
|
-
|
|
925
|
+
hasNestedScroll(node, { deltaX, deltaY }) {
|
|
925
926
|
const time = Date.now();
|
|
926
927
|
if (!node._lenis) node._lenis = {};
|
|
927
928
|
const cache = node._lenis;
|
|
@@ -929,24 +930,31 @@ var Lenis = class {
|
|
|
929
930
|
let hasOverflowY;
|
|
930
931
|
let isScrollableX;
|
|
931
932
|
let isScrollableY;
|
|
933
|
+
let hasOverscrollBehaviorX;
|
|
934
|
+
let hasOverscrollBehaviorY;
|
|
932
935
|
let scrollWidth;
|
|
933
936
|
let scrollHeight;
|
|
934
937
|
let clientWidth;
|
|
935
938
|
let clientHeight;
|
|
936
|
-
const gestureOrientation = this.options.gestureOrientation;
|
|
937
939
|
if (time - (cache.time ?? 0) > 2e3) {
|
|
938
940
|
cache.time = Date.now();
|
|
939
941
|
const computedStyle = window.getComputedStyle(node);
|
|
940
942
|
cache.computedStyle = computedStyle;
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
hasOverflowY = ["auto", "overlay", "scroll"].includes(
|
|
943
|
+
hasOverflowX = ["auto", "overlay", "scroll"].includes(
|
|
944
|
+
computedStyle.overflowX
|
|
945
|
+
);
|
|
946
|
+
hasOverflowY = ["auto", "overlay", "scroll"].includes(
|
|
947
|
+
computedStyle.overflowY
|
|
948
|
+
);
|
|
949
|
+
hasOverscrollBehaviorX = ["auto"].includes(
|
|
950
|
+
computedStyle.overscrollBehaviorX
|
|
951
|
+
);
|
|
952
|
+
hasOverscrollBehaviorY = ["auto"].includes(
|
|
953
|
+
computedStyle.overscrollBehaviorY
|
|
954
|
+
);
|
|
945
955
|
cache.hasOverflowX = hasOverflowX;
|
|
946
956
|
cache.hasOverflowY = hasOverflowY;
|
|
947
957
|
if (!(hasOverflowX || hasOverflowY)) return false;
|
|
948
|
-
if (gestureOrientation === "vertical" && !hasOverflowY) return false;
|
|
949
|
-
if (gestureOrientation === "horizontal" && !hasOverflowX) return false;
|
|
950
958
|
scrollWidth = node.scrollWidth;
|
|
951
959
|
scrollHeight = node.scrollHeight;
|
|
952
960
|
clientWidth = node.clientWidth;
|
|
@@ -959,6 +967,8 @@ var Lenis = class {
|
|
|
959
967
|
cache.scrollHeight = scrollHeight;
|
|
960
968
|
cache.clientWidth = clientWidth;
|
|
961
969
|
cache.clientHeight = clientHeight;
|
|
970
|
+
cache.hasOverscrollBehaviorX = hasOverscrollBehaviorX;
|
|
971
|
+
cache.hasOverscrollBehaviorY = hasOverscrollBehaviorY;
|
|
962
972
|
} else {
|
|
963
973
|
isScrollableX = cache.isScrollableX;
|
|
964
974
|
isScrollableY = cache.isScrollableY;
|
|
@@ -968,50 +978,39 @@ var Lenis = class {
|
|
|
968
978
|
scrollHeight = cache.scrollHeight;
|
|
969
979
|
clientWidth = cache.clientWidth;
|
|
970
980
|
clientHeight = cache.clientHeight;
|
|
981
|
+
hasOverscrollBehaviorX = cache.hasOverscrollBehaviorX;
|
|
982
|
+
hasOverscrollBehaviorY = cache.hasOverscrollBehaviorY;
|
|
971
983
|
}
|
|
972
|
-
if (!(
|
|
973
|
-
return false;
|
|
974
|
-
}
|
|
975
|
-
if (gestureOrientation === "vertical" && !(hasOverflowY && isScrollableY))
|
|
976
|
-
return false;
|
|
977
|
-
if (gestureOrientation === "horizontal" && !(hasOverflowX && isScrollableX))
|
|
984
|
+
if (!(hasOverflowX && isScrollableX || hasOverflowY && isScrollableY)) {
|
|
978
985
|
return false;
|
|
979
|
-
let orientation;
|
|
980
|
-
if (gestureOrientation === "horizontal") {
|
|
981
|
-
orientation = "x";
|
|
982
|
-
} else if (gestureOrientation === "vertical") {
|
|
983
|
-
orientation = "y";
|
|
984
|
-
} else {
|
|
985
|
-
const isScrollingX = deltaX !== 0;
|
|
986
|
-
const isScrollingY = deltaY !== 0;
|
|
987
|
-
if (isScrollingX && hasOverflowX && isScrollableX) {
|
|
988
|
-
orientation = "x";
|
|
989
|
-
}
|
|
990
|
-
if (isScrollingY && hasOverflowY && isScrollableY) {
|
|
991
|
-
orientation = "y";
|
|
992
|
-
}
|
|
993
986
|
}
|
|
994
|
-
|
|
987
|
+
const orientation = Math.abs(deltaX) >= Math.abs(deltaY) ? "horizontal" : "vertical";
|
|
995
988
|
let scroll;
|
|
996
989
|
let maxScroll;
|
|
997
990
|
let delta;
|
|
998
991
|
let hasOverflow;
|
|
999
992
|
let isScrollable;
|
|
1000
|
-
|
|
1001
|
-
|
|
993
|
+
let hasOverscrollBehavior;
|
|
994
|
+
if (orientation === "horizontal") {
|
|
995
|
+
scroll = Math.round(node.scrollLeft);
|
|
1002
996
|
maxScroll = scrollWidth - clientWidth;
|
|
1003
997
|
delta = deltaX;
|
|
1004
998
|
hasOverflow = hasOverflowX;
|
|
1005
999
|
isScrollable = isScrollableX;
|
|
1006
|
-
|
|
1007
|
-
|
|
1000
|
+
hasOverscrollBehavior = hasOverscrollBehaviorX;
|
|
1001
|
+
} else if (orientation === "vertical") {
|
|
1002
|
+
scroll = Math.round(node.scrollTop);
|
|
1008
1003
|
maxScroll = scrollHeight - clientHeight;
|
|
1009
1004
|
delta = deltaY;
|
|
1010
1005
|
hasOverflow = hasOverflowY;
|
|
1011
1006
|
isScrollable = isScrollableY;
|
|
1007
|
+
hasOverscrollBehavior = hasOverscrollBehaviorY;
|
|
1012
1008
|
} else {
|
|
1013
1009
|
return false;
|
|
1014
1010
|
}
|
|
1011
|
+
if (!hasOverscrollBehavior && (scroll >= maxScroll || scroll <= 0)) {
|
|
1012
|
+
return true;
|
|
1013
|
+
}
|
|
1015
1014
|
const willScroll = delta > 0 ? scroll < maxScroll : scroll > 0;
|
|
1016
1015
|
return willScroll && hasOverflow && isScrollable;
|
|
1017
1016
|
}
|