Jump to content

Search In
  • More options...
Find results that contain...
Find results in...

GreenSock last won the day on February 18

GreenSock had the most liked content!


  • Content Count

  • Joined

  • Last visited

  • Days Won


GreenSock last won the day on February 18

GreenSock had the most liked content!

Community Reputation

9,375 Superhero

About GreenSock

  • Rank

Contact Methods

Profile Information

  • Gender
  • Location
    Chicago Area
  • Interests
    Volleyball, Basketball, Christian Apologetics, Motorcycling

Recent Profile Visitors

50,638 profile views
  1. Ah yes, sorry about any confusion there and thanks for the reduced test case! Very helpful. There was indeed an issue with the way GSAP interpreted transform data that was set OUTSIDE of GSAP and had a non-standard origin. In your case, you've got transforms applied like this: "translate(55.500000, 53.500000) rotate(-90.000000) translate(-55.500000, -53.500000)" which basically is a rather verbose way of rotating the SVG shape around a different origin. I think I've got it fixed in the next release which you can preview at https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js Better?
  2. Sure, here you go: https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-beta.tgz
  3. Ah, that's actually not a regression from what I can tell - it's just a regular bug in v3. Good catch! It only affects position: "fixed" elements that are not of type: "rotation". I believe that's fixed in the next release which you can preview at https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/Draggable3.min.js Better?
  4. I didn't understand that comment. Did you know that you can set autoRemoveChildren: true and smoothChildTiming: true to a timeline and it'll act very much like the root timeline? You don't have to keep manually removing animations. I wonder if you've tried this at all. This sounds a lot like what I mentioned earlier with exportRoot(). Are you familiar with that? Is there some reason that wouldn't work for you? Nope, not if you do it in either of the ways I described above. If I understand your description properly, I've done EXACTLY what you're talking about with exportRoot() and it worked great. Super easy. No problem. But like Blake, I'm super curious what you'd switch to and why. GSAP isn't for everyone, but I think you may have a really hard time finding something that comes even close to the feature set which is fine if you're doing simple stuff but it sounds like you're more of an advanced user. In my experience, folks like you tend to demand a lot from their animation tools and it gets REALLY frustrating/stifling when you write a bunch of code that depends on a less robust tool that seems fine initially and then you need something more advanced and you're...well...out of luck. We really try to craft our tools to serve the unique needs of high-end professionals. I'm relatively confident there's already a solution you could use in GSAP (especially with with Blake mentioned above), but if not, I'm still very curious about what library you'd be switching to for something like that. Happy tweening!
  5. @Friebel I did add a few notes to the Migration guide per your request. I do see what you mean. It's always tough for us to figure out the right balance between adequately rich/focused content and overwhelmingly detailed/wordy posts that nobody is gonna want to read Thanks for the feedback.
  6. Yes, thanks so much for the reduced test case! And I'm so sorry about that regression. It should be resolved in the next release which you can preview at https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js
  7. If the goal is to have a reference to your class instance as well as a reference to the tween instance...and my goal is to keep GSAP as small as possible...wouldn't the best overall solution be to do what @Friebel mentioned above and do this?: gsap.to(... { onCompleteParams: [this], onComplete: function(myObject) { console.log(this); // tween console.log(myObject); // class instance } }); Or better yet, just make yourself a little helper function to automate that: // this function will always push the tween instance into the parameters for you and allow you to define a scope. function callback(func, params, scope) { let tween; params = params || []; return function() { if (!tween) { tween = this; params.push(tween); } func.apply(scope || tween, params); }; } And then the usage would look like: gsap.to(... { onComplete: callback(tween => { console.log(this); // since this is an arrow function, scope is locked anyway so this is your class instance console.log(tween); // tween instance }) }); The helper function gives you ultimate flexibility; define any scope, pass in any parameters, or just use arrow functions naturally and have the tween instance always passed in as a parameter by default. I didn't test any of that code but hopefully it at least illustrates the concept properly. Almost nobody used the "{self}" special param thing in the v1/v2 days, so I'm just not inclined to add more kb to GSAP and slow down parsing for something that can easily be accomplished with a helper function like above. See what I mean? Does that help at all?
  8. Yep, that's a good catch. Sorry about the confusion there - I can add the params parsing to the advanced staggers object. It's done in the next release which you can preview at https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js
  9. Thanks for the reduced test case! Yeah, this was an interesting side effect of an internal change in the way rounding was done. Previously, ~~(value * 10000) / 10000 was used whereas now it's Math.round(value * 10000) / 10000 but the bitwise operator would take NaN and make it 0 whereas Math.round() won't. Ha. Anyway, I'll add some code to work around this edge case in the next release: https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js
  10. Ah yes, I'll have a fix for that tomorrow. Stand by.
  11. Yes indeed - if you sliced the path EXACTLY on top of an anchor point that was the very next one in line (same Bezier segment), it wouldn't slice properly. So literally if you did -0.2499 or -0.2501 it'd be fine but -0.25 broke. That should be fixed in the next release which you can preview at https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/MotionPathPlugin.min.js Better?
  12. Another gem That'd only happen if you place it EXACTLY at the start of the timeline AND the timeline had already completed AND you had autoRemoveChildren: true. Should be resolved in the next release: https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js Better?
  13. If you're just curious about the "why", here ya go: It loops through each property and the array has 0 and 1 property names, so it tries to get the starting values from the target object but of course those are "undefined". Internally GSAP checks to see if it's a number that's parsable and in this case it's not, so it skips the regular numeric logic and hands it off to the complex string parsing algorithm which defaults to a starting value of "0", thus it treats undefined like a complex string. I really don't see any problem with the way this is working, nor do I think I need to add extra logic into the core to accommodate this - do you?
  14. Two questions: Aren't we in agreement that folks defining vars as an Array probably isn't a good thing to allow? I may be misunderstanding what you mean, but I guess I don't see why that wouldn't work. The array has 2 "properties", 0, and 1...so it's applying those to the Object. Did I miss something?