Jump to content


Change three.js widthSegments number of a box using gsap

Moderator Tag

Recommended Posts

I want to change the widthSegments of my box using a gsap timeline, but when I try it's doing nothing. For now, I've tried this:

const tl = gsap.timeline();

    widthSegments: 1,
    yoyo: true,
    repeat: -1,
    widthSegments: 2,
    yoyo: true,
    repeat: -1,


Link to comment
Share on other sites

It's pretty tough to troubleshoot without a minimal demo - the issue could be caused by CSS, markup, a third party library, your browser, an external script that's totally unrelated to GSAP, etc. Would you please provide a very simple CodePen or CodeSandbox that demonstrates the issue? 


Please don't include your whole project. Just some colored <div> elements and the GSAP code is best (avoid frameworks if possible). See if you can recreate the issue with as few dependancies as possible. If not, incrementally add code bit by bit until it breaks. Usually people solve their own issues during this process! If not, then at least we have a reduced test case which greatly increases your chances of getting a relevant answer.


Here's a starter CodePen that loads all the plugins. Just click "fork" at the bottom right and make your minimal demo

See the Pen aYYOdN by GreenSock (@GreenSock) on CodePen


If you're using something like React/Next/Vue/Nuxt or some other framework, you may find StackBlitz easier to use. We have a series of collections with different templates for you to get started on these different frameworks: React/Next/Vue/Nuxt.


Once we see an isolated demo, we'll do our best to jump in and help with your GSAP-specific questions. 

Link to comment
Share on other sites

Hello @eli-ott,


I think that is more of a three.js question than it is a GSAP one.


I'm far from being an expert with three.js, but from what I understand, any of the values related to the geometry of an object (width, height, depth, and their respective segment-counts) can not simply be updated on the fly and those updated values expected to be visually reflected by three.js.


That's why for changing dimensions, you'd typically go with changing the scale (.x .y or .z) instead of the geometry itself (width, height, depth, ...).


For changing the geometry itself, you'd need to set up a new geometry for your object, (dispose the old geometry) and then set the object's geometry to the new geometry, instead.


Here's a StackOverflow Post I found on that topic:






And here's a codepen changing the geometry on scroll with ScrollTrigger in an onUpdate callback of the timeline - I hope that will help.



I added a second geometry (mesh) just for visualization reasons - of course if you don't need that, you won't have to add extra geometry. 


See the Pen WNavmpB by akapowl (@akapowl) on CodePen


  • Like 2
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.