Comments (4)
We might be able to do something with the detectOverflow middleware - is there anyway to disable the layoutShift option on the fly?
Hmm interesting, I think using hide()
can work indeed, by checking referenceHidden
and calling cleanup()
and setting it up again with new options.
Something like this may work:
let cleanup = autoUpdate(ref, float, update);
let previousReferenceHidden = false;
function update() {
computePosition(ref, float, {
middleware: [hide()]
}).then(data => {
const isHidden = data.middlewareData.hide?.referenceHidden;
if (isHidden && !previousReferenceHidden) {
cleanup();
cleanup = autoUpdate(ref, float, update, {layoutShift: false});
} else if (!isHidden && previousReferenceHidden) {
cleanup();
cleanup = autoUpdate(ref, float, update);
}
previousReferenceHidden = isHidden;
});
}
What's probably better than this though is using that variable to unmount and clean up the floating element entirely? When it opens again, re-mount it.
from floating-ui.
I'm aware of this loop, and internally the updates are throttled to 1 update per 100ms as you see.
I didn't manage to find a way to fix it (there may be), but regardless of it, I didn't consider it to be a major issue once I throttled it, because the updates are still slower than those when scrolling, resizing, etc. In addition, it's also not common to have a floating element be mounted while clipped for extended periods, where the idle state having updates being called for a long period is a problem. No perf issues have been filed as an issue in the ~6 months since the feature was released.
The layoutShift: boolean
option in autoUpdate
can be set to false
to prevent this from happening if absolutely necessary.
from floating-ui.
Yeah - our use case is certainly on the edge! We are injecting elements into existing sites, and need to account for when a elements parent is a collapse for example. I did play with layoutShift
but we ideally want that on when the item is visible.
We might be able to do something with the detectOverflow
middleware - is there anyway to disable the layoutShift
option on the fly?
Ill keep playing and see what we can do.
from floating-ui.
Yeah - Like it. Agree with removing it - we are doing a lot of that already so that fits nicely with how the app works atm. Cheers for you help
from floating-ui.
Related Issues (20)
- popper misplaced on Y axis HOT 1
- Angular 17 - RangeError: Maximum call stack size exceeded on getComputedStyle HOT 2
- When using FloatingOverlay tabbing within a floating does not bring element into view HOT 2
- focus is visible even if keyboard is not being used HOT 2
- useDismiss not working when click on iframe elements HOT 1
- webcomponent floating UI: Panel Positioning Issue HOT 4
- Adaptive function HOT 2
- autoUpdate never settle when reference is in a scrollable div HOT 1
- The tooltip should be visible when I hover over it. HOT 1
- UnPKG version is not currently working HOT 1
- Floating UI Position Incorrect When Modal is Nested Inside Drawer Component HOT 5
- Reference error: process is not defined HOT 3
- List navigation doesn't scroll to selected item when other focusable elements are present in popover HOT 2
- Tooltip position is not updated when resizing window HOT 2
- Duplicate generated type aliases HOT 6
- isPositioned never gets updated on Safari and Firefox HOT 1
- Implicit dependency on React 18 typings HOT 1
- UseInteractionsReturn is missing HOT 1
- Regression in @floating-ui/[email protected] and return focus HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from floating-ui.