mirror of
https://github.com/primefaces/primevue.git
synced 2025-05-09 00:42:36 +00:00
Fixed #4784 - Collision Enhancements
This commit is contained in:
parent
a5a0ce75c8
commit
cba43b310b
9 changed files with 155 additions and 95 deletions
|
@ -363,6 +363,35 @@ export default {
|
|||
}
|
||||
},
|
||||
|
||||
nestedPosition(element, level) {
|
||||
if (element) {
|
||||
const parentItem = element.parentElement;
|
||||
const elementOffset = this.getOffset(parentItem);
|
||||
const viewport = this.getViewport();
|
||||
const sublistWidth = element.offsetParent ? element.offsetWidth : this.getHiddenElementOuterWidth(element);
|
||||
const itemOuterWidth = this.getOuterWidth(parentItem.children[0]);
|
||||
let left;
|
||||
|
||||
if (parseInt(elementOffset.left, 10) + itemOuterWidth + sublistWidth > viewport.width - this.calculateScrollbarWidth()) {
|
||||
if (parseInt(elementOffset.left, 10) < sublistWidth) {
|
||||
// for too small screens
|
||||
if (level % 2 === 1) {
|
||||
left = parseInt(elementOffset.left, 10) ? '-' + parseInt(elementOffset.left, 10) + 'px' : '100%';
|
||||
} else if (level % 2 === 0) {
|
||||
left = viewport.width - sublistWidth - this.calculateScrollbarWidth() + 'px';
|
||||
}
|
||||
} else {
|
||||
left = '-100%';
|
||||
}
|
||||
} else {
|
||||
left = '100%';
|
||||
}
|
||||
|
||||
element.style.top = '0px';
|
||||
element.style.left = left;
|
||||
}
|
||||
},
|
||||
|
||||
getParents(element, parents = []) {
|
||||
return element['parentNode'] === null ? parents : this.getParents(element.parentNode, parents.concat([element.parentNode]));
|
||||
},
|
||||
|
|
1
components/lib/utils/Utils.d.ts
vendored
1
components/lib/utils/Utils.d.ts
vendored
|
@ -34,6 +34,7 @@ export declare class DomHandler {
|
|||
static getWidth(el: HTMLElement): number;
|
||||
static absolutePosition(el: HTMLElement, target: HTMLElement): void;
|
||||
static relativePosition(el: HTMLElement, target: HTMLElement): void;
|
||||
static nestedPosition(el: HTMLElement, level: number): void;
|
||||
static getParents(el: HTMLElement, parents?: any[]): any[];
|
||||
static getScrollableParents(el: HTMLElement): any[];
|
||||
static getHiddenElementOuterHeight(el: HTMLElement): number;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue