Jump to content
Search Community

CSS3 rotation and matrix3d values precision vs. the straight rotateY

jamix test
Moderator Tag

Go to solution Solved by GreenSock,

Warning: Please note

This thread was started before GSAP 3 was released. Some information, especially the syntax, may be out of date for GSAP 3. Please see the GSAP 3 migration guide and release notes for more information about how to update the code to GSAP 3's syntax. 

Recommended Posts

We need to do very slow Y-rotation of a wide object in our project, and we noticed that this produces visible jerking with GSAP. We have been able to trace it to a precision issue in the values of the matrix3d transform that GSAP generates.

 

Basically, during the tween, the 4th value of matrix3d increases from 0 to 0.00001, 0.00002 and so on. The thing is, even though there's tweening going on, the object doesn't get redrawn until this value changes (from 0 to 0.00001 and then to 0.00002 etc.), which produces the jerkiness.

 

See the Codepen where both the red and blue rectangles are rotated 10 degress over 60 seconds and observe the jerkiness in the red one (more visible in Firefox due to lesser anti-aliasing). The only difference is that the rotation is applied through TweenLite to the red rectangle and directly via CSS to the blue one.

 

We have switched to tweening of the CSS in our project but it would be nice to see this issue address in GSAP's CSS tweening, too.

See the Pen qEqRZj by anon (@anon) on CodePen

Link to comment
Share on other sites

I'll look into this further, but I'm pretty sure it has to do with a limitation in how browsers cast a number as a string. Super small numbers get converted to scientific notation, like 0.0000000001 turns into 1e-10 and unfortunately, browsers refuse to read numbers like that in a matrix() or matrix3d() string (or pretty much any css value). That's why GSAP does the slight rounding of super small values. I'll poke around and see if I can identify any workarounds that are performant (I do NOT want to use something like toFixed() because it really hurts performance). 

  • Like 3
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...