Skip to content

Commit 39c779a

Browse files
committed
fix(types): allow string or element
1 parent a081888 commit 39c779a

File tree

3 files changed

+26
-20
lines changed

3 files changed

+26
-20
lines changed

src/global.interface.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export interface ScrollToElementOptions {
1111
onDone?: any;
1212
container?: any;
1313
onAborting?: any;
14-
element?: HTMLElement;
14+
element?: HTMLElement | string;
1515
}
1616

1717
export interface ScrollToElementPosition {

src/helpers/helper.ts

+19-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { ScrollToElementOptions, ScrollToElementPosition } from '../global.interface';
1+
import { ScrollToElementOptions, ScrollToElementPosition } from './../global.interface';
22

3-
export const $ = (selector: HTMLElement): HTMLElement => {
3+
export const $ = (selector: HTMLElement | string): HTMLElement => {
44
if (typeof selector === 'string') {
55
return document.querySelector(selector);
66
}
@@ -10,14 +10,15 @@ export const $ = (selector: HTMLElement): HTMLElement => {
1010
export const extend = (...args: ScrollToElementOptions[]): ScrollToElementOptions => Object.assign({}, ...args);
1111

1212
export const cumulativeOffset = (element: HTMLElement | any): ScrollToElementPosition => {
13+
let el = element;
1314
let top = 0;
1415
let left = 0;
1516

1617
do {
17-
top += element.offsetTop || 0;
18-
left += element.offsetLeft || 0;
19-
element = element.offsetParent;
20-
} while (element);
18+
top += el.offsetTop || 0;
19+
left += el.offsetLeft || 0;
20+
el = el.offsetParent;
21+
} while (el);
2122

2223
return {
2324
top,
@@ -27,24 +28,30 @@ export const cumulativeOffset = (element: HTMLElement | any): ScrollToElementPos
2728

2829
export const directScroll = (element: HTMLElement | any): boolean => element && element !== document && element !== document.body;
2930

30-
export const scrollTop = (element: HTMLElement | any, value?: number): number => {
31+
export const scrollTop = (el: HTMLElement | string, value?: number): number => {
32+
const element = $(el);
3133
const inSetter = value !== undefined;
3234
if (directScroll(element)) {
33-
return inSetter ? (element.scrollTop = value) : element.scrollTop;
35+
const result = inSetter ? (element.scrollTop = value) : element.scrollTop;
36+
return result;
3437
}
35-
return inSetter
38+
const res = inSetter
3639
? (document.documentElement.scrollTop = document.body.scrollTop = value)
3740
: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
41+
return res;
3842
};
3943

40-
export const scrollLeft = (element: HTMLElement, value?: number): number => {
44+
export const scrollLeft = (el: HTMLElement | string, value?: number): number => {
45+
const element = $(el);
4146
const inSetter = value !== undefined;
4247
if (directScroll(element)) {
43-
return inSetter ? (element.scrollLeft = value) : element.scrollLeft;
48+
const res = inSetter ? (element.scrollLeft = value) : element.scrollLeft;
49+
return res;
4450
}
45-
return inSetter
51+
const res = inSetter
4652
? (document.documentElement.scrollLeft = document.body.scrollLeft = value)
4753
: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
54+
return res;
4855
};
4956

5057
export const noop = () => {};

src/services/service.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const defaultOptions: ScrollToElementOptions = {
1919

2020
// Scroll to internal implementation
2121
const scrollToInternal = (options: ScrollToElementOptions): (() => void) => {
22-
const { duration, delay, easing, x = 0, y = 0, scrollX, scrollY, onStart, onDone, onAborting, container, element } = options;
22+
const { duration, delay, easing, x = 0, y = 0, scrollX, scrollY, onStart, onDone, container, onAborting, element } = options;
2323

2424
let { offset } = options;
2525

@@ -44,7 +44,7 @@ const scrollToInternal = (options: ScrollToElementOptions): (() => void) => {
4444
const startTime = performance.now() + delay;
4545
const endTime = startTime + duration;
4646

47-
const scrollToTopLeft = (el: HTMLElement, top: number, left: number): void => {
47+
const scrollToTopLeft = (el: HTMLElement | string, top: number, left: number): void => {
4848
if (scrollX) scrollLeft(el, left);
4949
if (scrollY) scrollTop(el, top);
5050
};
@@ -94,9 +94,8 @@ const scrollToInternal = (options: ScrollToElementOptions): (() => void) => {
9494
return stop;
9595
};
9696

97-
// Helper functions
98-
const proceedOptions = (options: ScrollToElementOptions): ScrollToElementOptions => {
99-
const opts = extend({}, defaultOptions, options);
97+
const proceedOptions = (options: ScrollToElementOptions | string): ScrollToElementOptions => {
98+
const opts = extend({}, defaultOptions, options as ScrollToElementOptions);
10099
opts.container = $(opts.container);
101100
opts.element = $(opts.element);
102101
return opts;
@@ -150,8 +149,8 @@ const makeScrollToAction = (scrollToFunc: Function) => (node: Node, options: Scr
150149
node.addEventListener('click', handle);
151150
node.addEventListener('touchstart', handle);
152151
return {
153-
update(options: ScrollToElementOptions): void {
154-
current = options;
152+
update(opts: ScrollToElementOptions): void {
153+
current = opts;
155154
},
156155
destroy(): void {
157156
node.removeEventListener('click', handle);

0 commit comments

Comments
 (0)