forked from Shiloh/githaven
Fix overflow menu flickering on mobile (#31484)
The overflow menu button was incorrectly included in the measurement of the width of the items. As a result, it could get stuck in a loop alternating between different measurements as the button appears and disappears.
This commit is contained in:
parent
24f4ebb8a9
commit
4af97cf383
@ -61,6 +61,7 @@ window.customElements.define('overflow-menu', class extends HTMLElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const itemFlexSpace = this.menuItemsEl.querySelector('.item-flex-space');
|
const itemFlexSpace = this.menuItemsEl.querySelector('.item-flex-space');
|
||||||
|
const itemOverFlowMenuButton = this.querySelector('.overflow-menu-button');
|
||||||
|
|
||||||
// move items in tippy back into the menu items for subsequent measurement
|
// move items in tippy back into the menu items for subsequent measurement
|
||||||
for (const item of this.tippyItems || []) {
|
for (const item of this.tippyItems || []) {
|
||||||
@ -72,7 +73,9 @@ window.customElements.define('overflow-menu', class extends HTMLElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// measure which items are partially outside the element and move them into the button menu
|
// measure which items are partially outside the element and move them into the button menu
|
||||||
|
// flex space and overflow menu are excluded from measurement
|
||||||
itemFlexSpace?.style.setProperty('display', 'none', 'important');
|
itemFlexSpace?.style.setProperty('display', 'none', 'important');
|
||||||
|
itemOverFlowMenuButton?.style.setProperty('display', 'none', 'important');
|
||||||
this.tippyItems = [];
|
this.tippyItems = [];
|
||||||
const menuRight = this.offsetLeft + this.offsetWidth;
|
const menuRight = this.offsetLeft + this.offsetWidth;
|
||||||
const menuItems = this.menuItemsEl.querySelectorAll('.item, .item-flex-space');
|
const menuItems = this.menuItemsEl.querySelectorAll('.item, .item-flex-space');
|
||||||
@ -89,6 +92,7 @@ window.customElements.define('overflow-menu', class extends HTMLElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
itemFlexSpace?.style.removeProperty('display');
|
itemFlexSpace?.style.removeProperty('display');
|
||||||
|
itemOverFlowMenuButton?.style.removeProperty('display');
|
||||||
|
|
||||||
// if there are no overflown items, remove any previously created button
|
// if there are no overflown items, remove any previously created button
|
||||||
if (!this.tippyItems?.length) {
|
if (!this.tippyItems?.length) {
|
||||||
|
Loading…
Reference in New Issue
Block a user