Git Product home page Git Product logo

Comments (3)

martinlaxenaire avatar martinlaxenaire commented on August 25, 2024

Hi @ajayns!

I think the way you're doing your transition is not the most optimal: as I understand you're animating the HTML element size and position and call the updatePosition() to sync your plane.
That means you'll trigger a repaint at each frame of your animation which is not really good in terms of performance.

For that kind of animations, I usually tween the scale and position of the plane:

  • Get your plane current size and position with plane.getBoundingRect() (and eventually your canvas/window size with curtains.getBoundingRect())
  • Calculate your plane final scale and position based on the previous values and the final plane's size and position
  • Set your plane transform origin to [0, 0] (top left corner) to make your calculations easier: plane.setTransformOrigin(0, 0);
  • Start your tween and update your position and scale in the update callback with plane.setScale() and plane.setRelativePosition()

Since you'd want to keep that plane alive, just don't remove it but instead reset it with the new according HTML element once your new content has been appended:
const newHTMLEl = document.getElementById("my-element"); // you could use querySelector() plane.resetPlane(newHTMLEl );

That should do the trick (at least that's how I'm doing it myself).

Also, planes do work well with fixed elements. In your case it might be because the actual HTML element isn't in your viewport or something like that?

Cheers,

from curtainsjs.

ajayns avatar ajayns commented on August 25, 2024

Thank you for the fast response.

I was aware it isn't the best performance-wise, I was mostly prototyping and experimenting on how to achieve the effects while using this library. Your approach seems solid though, so I'll try what you've mentioned and get back to you soon.
Also, the resetPlane was probably what I was looking for, I was unaware of that. Good job on covering a wide range of options in your API!

Thanks again

from curtainsjs.

ajayns avatar ajayns commented on August 25, 2024

This works perfectly, thanks again Martin. I'm closing the issue.

from curtainsjs.

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.