Skip to content

Commit 1d245ec

Browse files
committed
fix(content): get correct content dimensions
1 parent 57a5345 commit 1d245ec

File tree

1 file changed

+35
-17
lines changed

1 file changed

+35
-17
lines changed

src/components/content/content.ts

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,9 @@ export class Content extends Ion {
325325
* @param {number} [duration] Duration of the scroll animation in milliseconds. Defaults to `300`.
326326
* @returns {Promise} Returns a promise which is resolved when the scroll has completed.
327327
*/
328-
scrollTo(x: number, y: number, duration: number = 300): Promise<any> {
329-
return this._scroll.scrollTo(x, y, duration);
328+
scrollTo(x: number, y: number, duration: number = 300, done?: Function): Promise<any> {
329+
console.debug(`content, scrollTo started, y: ${y}, duration: ${duration}`);
330+
return this._scroll.scrollTo(x, y, duration, done);
330331
}
331332

332333
/**
@@ -336,6 +337,7 @@ export class Content extends Ion {
336337
* @returns {Promise} Returns a promise which is resolved when the scroll has completed.
337338
*/
338339
scrollToTop(duration: number = 300) {
340+
console.debug(`content, scrollToTop, duration: ${duration}`);
339341
return this._scroll.scrollToTop(duration);
340342
}
341343

@@ -352,6 +354,7 @@ export class Content extends Ion {
352354
* @param {number} top
353355
*/
354356
setScrollTop(top: number) {
357+
console.debug(`content, setScrollTop, top: ${top}`);
355358
this._scroll.setTop(top);
356359
}
357360

@@ -361,6 +364,7 @@ export class Content extends Ion {
361364
* @returns {Promise} Returns a promise which is resolved when the scroll has completed.
362365
*/
363366
scrollToBottom(duration: number = 300) {
367+
console.debug(`content, scrollToBottom, duration: ${duration}`);
364368
return this._scroll.scrollToBottom(duration);
365369
}
366370

@@ -411,26 +415,23 @@ export class Content extends Ion {
411415
* {number} dimensions.scrollLeft scroll scrollLeft
412416
* {number} dimensions.scrollRight scroll scrollLeft + scrollWidth
413417
*/
414-
getContentDimensions() {
415-
let _scrollEle = this._scrollEle;
416-
let parentElement = _scrollEle.parentElement;
418+
getContentDimensions(): ContentDimensions {
419+
const scrollEle = this._scrollEle;
420+
const parentElement = scrollEle.parentElement;
417421

418422
return {
419-
contentHeight: parentElement.offsetHeight,
420-
contentTop: parentElement.offsetTop,
421-
contentBottom: parentElement.offsetTop + parentElement.offsetHeight,
423+
contentHeight: parentElement.offsetHeight - this.contentTop - this.contentBottom,
424+
contentTop: this.contentTop,
425+
contentBottom: this.contentBottom,
422426

423427
contentWidth: parentElement.offsetWidth,
424428
contentLeft: parentElement.offsetLeft,
425-
contentRight: parentElement.offsetLeft + parentElement.offsetWidth,
426429

427-
scrollHeight: _scrollEle.scrollHeight,
428-
scrollTop: _scrollEle.scrollTop,
429-
scrollBottom: _scrollEle.scrollTop + _scrollEle.scrollHeight,
430+
scrollHeight: scrollEle.scrollHeight,
431+
scrollTop: scrollEle.scrollTop,
430432

431-
scrollWidth: _scrollEle.scrollWidth,
432-
scrollLeft: _scrollEle.scrollLeft,
433-
scrollRight: _scrollEle.scrollLeft + _scrollEle.scrollWidth,
433+
scrollWidth: scrollEle.scrollWidth,
434+
scrollLeft: scrollEle.scrollLeft,
434435
};
435436
}
436437

@@ -443,7 +444,7 @@ export class Content extends Ion {
443444
addScrollPadding(newPadding: number) {
444445
assert(typeof this._scrollPadding === 'number', '_scrollPadding must be a number');
445446
if (newPadding > this._scrollPadding) {
446-
console.debug('content addScrollPadding', newPadding);
447+
console.debug(`content, addScrollPadding, newPadding: ${newPadding}, this._scrollPadding: ${this._scrollPadding}`);
447448

448449
this._scrollPadding = newPadding;
449450
this._scrollEle.style.paddingBottom = (newPadding > 0) ? newPadding + 'px' : '';
@@ -456,13 +457,15 @@ export class Content extends Ion {
456457
*/
457458
clearScrollPaddingFocusOut() {
458459
if (!this._inputPolling) {
460+
console.debug(`content, clearScrollPaddingFocusOut begin`);
459461
this._inputPolling = true;
460462

461463
this._keyboard.onClose(() => {
464+
console.debug(`content, clearScrollPaddingFocusOut _keyboard.onClose`);
462465
this._inputPolling = false;
463466
this._scrollPadding = -1;
464467
this.addScrollPadding(0);
465-
}, 200, Infinity);
468+
}, 200, 3000);
466469
}
467470
}
468471

@@ -641,3 +644,18 @@ function parsePxUnit(val: string): number {
641644
function cssFormat(val: number): string {
642645
return (val > 0 ? val + 'px' : '');
643646
}
647+
648+
export interface ContentDimensions {
649+
contentHeight: number;
650+
contentTop: number;
651+
contentBottom: number;
652+
653+
contentWidth: number;
654+
contentLeft: number;
655+
656+
scrollHeight: number;
657+
scrollTop: number;
658+
659+
scrollWidth: number;
660+
scrollLeft: number;
661+
}

0 commit comments

Comments
 (0)