Code Monkey home page Code Monkey logo

Comments (4)

atomiks avatar atomiks commented on June 4, 2024 1

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.

atomiks avatar atomiks commented on June 4, 2024

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.

mattbryson avatar mattbryson commented on June 4, 2024

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.

mattbryson avatar mattbryson commented on June 4, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.