Skip to content

Tags: hjkimw/GSAP

Tags

3.12.7

Toggle 3.12.7's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.7

- FIXED: regression in 3.12.6 that set pointer-events: none on ScrollTrigger pin spacers which caused descendents to stop responding to clicks and other pointer events.

- FIXED: regression in 3.12.6 that could throw an error if you don’t pass a vars/config object to Flip.fit().

3.12.6

Toggle 3.12.6's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.6

- IMPROVED: if you set immediateRender: true on a motionPath tween, it'll force the initial render to put that element on the path right away.

- IMPROVED: ScrollTrigger.sort() uses a better default algorithm that prioritizes the vertical position of the trigger element instead of the calculated start position of the ScrollTrigger. See https://gsap.com/community/forums/topic/40584-scrolltriggerrefresh-doesnt-do-anything-after-pinned-sections-are-dynamically-loaded/

- IMPROVED: TypeScript definition for MotionPathPlugin, like for allowing strings in the Array-based syntax, like [{x: "100vw"}] and function-based values for start/end. See https://gsap.com/community/forums/topic/40894-typescript-errors-for-start-and-end-fields-for-motionpath/ and greensock#578

- IMPROVED: you can pass true to ScrollTrigger.refresh(true) to have it do a "safe" refresh, meaning that if the page is in the middle of scrolling, it'll wait until it's done before doing the refresh. That way, it won't kill an in-progress momentum scroll. See https://gsap.com/community/forums/topic/40935-gsap-scrolltrigger-start-position-breaks-on-dom-changes/

- IMPROVED: added pointer-events: none to pin spacer elements that ScrollTrigger creates which helps work around a Chrome browser bug.

- IMPROVED: Expo ease was enhanced to eliminate the possible jump at the very end. See https://gsap.com/community/forums/topic/25331-weird-jump-at-end-of-tween-with-expoout-ease/

- FIXED: if you set a zIndex on a Flip.fit(), it works now.

- FIXED: reading transform-related properties on a position: fixed element that has no transforms applied could result in the element getting temporarily added to the DOM at the root which could cause iframe content to reload, like a Vimeo video. See https://gsap.com/community/forums/topic/39645-flip-with-iframe-causes-iframe-to-rerender/

- FIXED: repeatRefresh may not actually refresh in a very rare condition (regression in 3.12.3).

- FIXED: if you use special characters like >,<, &, etc. in a TextPlugin tween on an SVG element, those characters could get replaced with the HTML code (like &gt; for >). See https://gsap.com/community/forums/topic/35550-handwritng-and-typewriter-animation-on-path-in-svg/

- FIXED: if you gsap.registerPlugin(ScrollTrigger) in an SSR framework like Next.js, it could complain that a style attribute was added to the document.body. That's removed now.

- FIXED: if you set a non-zero stagger value in gsap.defaults() (which is a very strange thing to do), it could throw an error when creating a gsap.quickTo().

- FIXED: repeatRefresh is in the TypeScript definitions now for staggers. See greensock#595

- FIXED: on a motionPath tween, if you use an Array-based path with targets that have a "style" property but are NOT DOM nodes, and the properties have names that are transform-related like x, y, scaleX, scaleY, etc., it could throw errors. See https://gsap.com/community/forums/topic/40023-motionpath-plugin-problem/

- FIXED: if you navigate back to a page that then reuses the same ScrollTrigger instance (like a React routing change), a timeline that has a scrubbed ScrollTrigger may not render the playhead at the right in-progress spot. See https://gsap.com/community/forums/topic/39982-scrolltrigger-breaks-when-navigating-back-usegsap-react-react-router/

- FIXED: on an Observer, if you set passive: false that may be ignored unless preventDefault is true. This is fixed now.

- FIXED: ScrollTriggers with a containerAnimation may not refresh their start/end values correctly if ScrollSmoother is used or ScrollTrigger.sort() is called. See https://gsap.com/community/forums/topic/37419-horizontal-scroll-resize/

- FIXED: on a tween with repeatRefresh: true, it may skip the refreshing of values if the parent playhead lands beyond where the repeat spot is, but by less than 0.000001 seconds (exceedingly rare!).

- FIXED: if you do a .from() animation of borderRadius using a unit of "rem", it may jump a bit at the very end of the tween. See https://gsap.com/community/forums/topic/40096-scroll-trigger-auto-scroll-back-and-animation-over-shoot/

- FIXED: if you revert() a gsap.context() that has a ScrollTrigger with a scroller that's not the window, it could cause snapping to no longer function. This affects the @gsap/react package's useGSAP() hook too. See https://gsap.com/community/forums/topic/40198-snapping-breaks-when-re-rendering-in-react/

- FIXED: if you set once: true on the first ScrollTrigger (in terms of refreshPriority order) and it activates on page load (meaning its start is smaller than the page's current scroll position), it could throw an error. See https://gsap.com/community/forums/topic/40242-scrolltriggerbatch-bug-with-once-scrolltriggers/

- FIXED: if you set a minimumMovement on a Draggable of type: "rotation", it would interpret it in degrees rather than pixels, and a minimumMovement of 0 would actually default to 2 (degrees).

- FIXED: worked around an odd behavior in Firefox where the browser would fire pointermove events without the pointer moving at all which affected Observer's lockAxis behavior and it could prematurely fire an onDrag, etc.

- FIXED: if you kill() a completed tween that has a ScrollTrigger, it may not also kill the ScrollTrigger. See https://gsap.com/community/forums/topic/40359-gsap-kill-doesnt-stop-scrolltrigger-onupdate-from-running/

- FIXED: extremely rare edge case where a lazy-initted tween is initially set to render at a non-zero time but before that lazy tween renders lazily, a render is triggered at a time of 0, it could end up rendering at the wrong time (the lazy-initted one instead of the slightly later render).

- FIXED: orientation changes didn't properly trigger a ScrollTrigger.refresh(), so the start/end values of ScrollTriggers could be inaccurate after an orientation change. See https://gsap.com/community/forums/topic/40713-scrolltriggers-are-positioned-wrong-after-orientation-change/

- FIXED: an Observer may fire an onDrag() AFTER the onDragEnd() if debounce is true, but now it'll make sure it fires it BEFORE the onDragEnd(). Also, with debounce: false, an onDrag() could fire before the onDragStart(). See https://gsap.com/community/forums/topic/40909-observer-ondrag-firing-after-ondragend/

- FIXED: in a very uncommon scenario, creating ScrollTriggers inside a DOMContentLoaded event might cause the start/end values to be miscalculated. See https://gsap.com/community/forums/topic/41267-scrolltrigger-breaks-on-refresh-when-using-domcontentloaded/

- FIXED: MotionPathHelper.editPath() may throw an error if you add an anchor to a path that has MULTIPLE segments (more than one "M" command).

- FIXED: if you apply a snap to a ScrollTrigger that has a non-scrubbing animation, and the start is at 0 or less, it might restart the animation after the snap duration elapses on page load.

- FIXED: if you remove() an animation from a timeline that was NOT its parent, it could cause an error.

- FIXED: if you call CustomEase.get() in an SSR environment before the window object is defined, it could throw an error. See https://gsap.com/community/forums/topic/42510-gsapregisterplugin-in-nodejs-server/

- FIXED: some links in the TypeScript definitions file were incorrect since the gsap.com site launch.

- FIXED: in very rare cases, a CustomEase might end at something like 0.999999999 instead of 1 progress-wise (so values wouldn't quite land at the destination). That's resolved now.

- FIXED: if you clearProps on a target that contains individual transform component values applied in a CSS rule (like translate, rotate, or scale), it may not properly clear the transform. See https://gsap.com/community/forums/topic/43073-separate-transform-properties-like-rotate-and-scale-behave-differently-then-a-combined-transform/

- FIXED: regression in Flip.fit() could cause the width/height of the initial state not to be factored in, but only if there was a non-zero duration.

- FIXED: an Angular issue related to SVG elements that return an empty getBBox() which could cause an error due to the temporary reparenting and re-assigning the getBBox() method itself inside GSAP. See https://gsap.com/community/forums/topic/42859-gsap-321-override-of-the-svg-api-method-getbbox-removes-angular-dblclick-binding-from-dom-element/

- FIXED: if you disable() and then change the scroll position and then enable() an Observer, on the next scroll it could factor in the pre-disabled scroll position in the calculations, thus firing an onDown() or onUp() (for example) incorrectly.

- FIXED: if you restart() a zero-duration timeline that has an onComplete which already fired, it will fire that again after the restart(). See greensock#604

- FIXED: zero-duration tweens wouldn't resolve then() Promises. See greensock#590

- FIXED: TypeScript definition for getById() allows for undefined as a return type. See greensock#589

- FIXED: ScrollSmoother doesn't set overscroll-behavior: none on the HTML/BODY anymore due to a Safari bug that caused that to stop the page from scrolling at all. See https://gsap.com/community/forums/topic/43802-loading-maps-api-scrollsmoother-in-safari-173-breaks-mousewheel-scroll-for-the-page/

- FIXED: PixiPlugin better accommodates the changes in Pixi.js version 7+, like fillColor and strokeColor. See greensock#580

3.12.5

Toggle 3.12.5's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.5

- IMPROVED: ScrollTrigger's ignoreMobileResize is true by default now because a few versions back we switched to calculating the window height based on 100vh instead of window.innerHeight, so it really isn't necessary to force a .refresh() on mobile resize (address bar showing/hiding). This change improves performance on mobile devices because it skips the expensive refresh() when the address bar shows/hides.

- IMPROVED: removed a DisplayObject check in PixiPlugin so that it's more compatible with the upcoming release of Pixi.js version 8. See greensock#561

- IMPROVED: the anticipatePin feature works when scrolling in either direction (previously it worked when scrolling forward only). See https://gsap.com/community/forums/topic/39521-anticipatepin-in-reverse/

- FIXED: regression in 3.12.3 could cause a ScrollTrigger that has a numeric scrub value and a snap to prematurely jump to the final progress value when the snap finished rather than waiting for the scrub to finish. See https://gsap.com/community/forums/topic/39363-scrolltrigger-scrub-clip-path-flicker-when-scroll-back/ and greensock#567

- FIXED: regression in 3.12.3 could cause a tween with repeatRefresh: true AND a non-zero repeatDelay not to refresh. See https://codepen.io/GreenSock/pen/yLwLgNQ/db88d564d6308b9fcff7b65efb95febf?editors=1010

- FIXED: if you set a ScrollSmoother's effects() in a delayed fashion (after two ticks elapse after page load), it may not calculate offsets properly. See https://gsap.com/community/forums/topic/39380-scroll-smoother-effects-targets-jump-on-effectstrue/

- FIXED: regression in 3.12.3: if the playhead lands exactly on top of the yoyo position of a keyframed tween, it may render at the state before the animation started (just for 1 tick). See greensock#558

- FIXED: if you set invalidateOnRefresh: true on a ScrollTrigger that's attached to a .fromTo() tween, it may not render at the initial state on refresh(). See https://gsap.com/community/forums/topic/39386-svgdraw-window-resize-issues/

- FIXED: if you create a gsap.matchMedia() inside a gsap.context() and then revert() that Context, it may not clear out non-matching media queries (they may fire again when matching). See https://gsap.com/community/forums/topic/39481-pin-spacer-is-double-the-height-it-should-be-after-window-resize/

- FIXED: if the system clock changes backwards to an earlier time, it could cause animations to stop. See greensock#568

- FIXED: if a flexbox child is pinned by ScrollTrigger and pinSpacing is false, flex-basis is now set to the pixel height/width of the element to avoid common layout problems.

- FIXED: missing TypeScript parameter for ScrollTrigger.clearScrollMemory(). See greensock#571

- FIXED: if you set a default stagger value via gsap.defaults(), it could cause an error in ScrollTrigger if you create one with a numeric scrub. See https://gsap.com/community/forums/topic/39600-scrolltrigger-numeric-scrub-throws-console-errors-in-gsap-core-cannot-read-properties-of-undefined-reading-totalprogress/

- FIXED: if a motionPath tween had a start or end value that wraps around and would land precisely on an anchor point that is not at the very start or end of a path, it could render incorrectly. See https://gsap.com/community/forums/topic/39594-why-are-content-1-and-content-2-overlaped-also-what-is-the-best-way-to-add-a-timeline-to-a-main-tween-or-timeline/

3.12.4

Toggle 3.12.4's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.4

- FIXED: regression in 3.12.3 could cause ScrollTriggers in gsap.matchMedia() to stop functioning after quick resizes that pass the matchMedia bounds. See https://gsap.com/community/forums/topic/39241-animations-freeze-after-a-few-window-resizes-and-using-gsapmatchmedia/

- FIXED: overwriting a scrollTo tween in such a way that didn't leave any more properties tweening, onInterrupt() wasn't invoked.

- FIXED: SplitText TypeScript definitions file needed an "elements" property. See greensock#564

- FIXED: if you Promise.all() or .then() a timeline that already finished and has a zero duration, that Promise may not resolve properly. See https://gsap.com/community/forums/topic/39291-promiseall-dont-resolve-when-overwrite/

- FIXED: regression in 3.12.3 could cause transforms (x, y, scaleX, scaleY, rotation, etc.) on SVG elements to calculate the origin incorrectly. See https://gsap.com/community/forums/topic/39197-update-3123-broke-my-code-for-animating-clip-paths and greensock#563

3.12.3

Toggle 3.12.3's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.3

- IMPROVED: gsap.context() and gsap.matchMedia() functions will get a 2nd argument that we'll call "contextSafe" which is like a wrapper for any function that you'd like to keep in the context. So any GSAP animations/ScrollTriggers/Draggables/Observers that are created during the execution of that function will be added to the context and the selector text will be scoped.

- IMPROVED: added a suppressEvents parameter to Tween/Timeline/Animation .timeScale() method so that you can optionally prevent it from suppressing events when altering the timeScale. See greensock#551

- IMPROVED added an ignoreSpeed [3rd] parameter to ScrollSmoother's offset() method to allow you to specify whether you want to get the value that corresponds to the window's scroll position or the ScrollSmoother's scrollTop value. See https://greensock.com/forums/topic/35108-problems-with-the-scrollsmoother-plug-in-speed-option-in-gsap-3114/

- IMPROVED: Observer now fires an onStop with an onMove (previously it would only fire after a press). See https://greensock.com/forums/topic/38469-observer-misunderstanding-with-onchange-onmove-and-onstop/

- IMPROVED: slight change to TypeScript definitions for EaseString allows arbitrary strings while also activating code hinting for the common ones in more environments. See greensock#556

- IMPROVED: animations/ScrollTriggers created inside a ScrollTrigger's callback like onEnter/onLeave/onToggle/onEnterBack/onLeaveBack will be added to the original Context (if one existed), meaning selector text will be scoped properly. See https://gsap.com/community/forums/topic/38850-reactgsap-why-i-cant-use-class-selector-in-scrolltrigger-inside-gsapcontext/

- IMPROVED: a ScrollTrigger's snap end position is limited to the resolution of the browser's scroll (whole pixels only), thus if you have a scrubbed animation that's supposed to snap to a very specific spot on that animation, it may end slightly off of that but now a correction runs at the end of the snap to ensure that it gets set PRECISELY to that snapped position. See https://gsap.com/community/forums/topic/38937-scrolltrigger-timeline-snapping-with-label-doesnt-snap-precisely-to-label-position/

- IMPROVED: the gsap-trial files will now work on domains that end in ".local" (for testing only please)

- FIXED: for an Observer, if you pressed, started dragging but released within 3 pixels of the original press, it wouldn't fire the onDragEnd. See https://greensock.com/forums/topic/37510-the-problem-that-ondragend-is-not-called-in-observer/

- FIXED: if you revert() a context/matchMedia that has a reversed animation, it may not render things in the proper order, potentially leaving inline styles when it shouldn't. See https://greensock.com/forums/topic/37432-issues-with-horizontalloop-helper/

- FIXED: if Draggable is applied to an <object> where the document isn't defined initially, an error could be thrown. See greensock#549

- FIXED: if you apply a speed to a ScrollSmoother (other than 1), the offset() method would return a value that corresponds to the window's scroll position rather than the ScrollSmoother's scrollTop (which is affected by speed). See https://greensock.com/forums/topic/35108-problems-with-the-scrollsmoother-plug-in-speed-option-in-gsap-3114/

- FIXED: if you apply an onUpdate to a .fromTo() tween, the scope ("this") would be linked to the zero-duration "from" tween instead of the actual tween instance you'd expect, thus its progress() would be 1 instead of 0 at the very start.

- FIXED: if you define position: absolute on a SplitText and then revert(), the width/height inline styles could remain instead of getting cleared out. See https://greensock.com/forums/topic/38391-responsive-behavior-using-splittext/

- FIXED: if you create a ScrollTrigger with a "snap" and pin inside a gsap.matchMedia(), it could lead to incorrect positioning of the pinned element after a resize that makes it no longer match.

- FIXED: if you set a CSS value to "auto" (like height or width) via a GSAP tween and then you revert() it, the original computed value could be left as an inline style instead of cleared out.

- FIXED: if you call kill() or revert() on a MotionPathHelper in certain specific conditions, it may delete the original <path> itself.

- FIXED: worked around a very rare scenario where document.createElement() returns undefined and would consequently throw an error in CSSPlugin. See greensock#553

- FIXED: if you create a staggered animation inside a gsap.context() or gsap.matchMedia() that affects the same element(s) as a gsap.set() that happened before that staggered animation and then the context/matchMedia gets reverted, the initial value may not get reverted properly.

- FIXED: if you animate a percentage-based width/height of an element whose parent has padding and/or is flexbox/grid, and the target element doesn't have that property already set inline, it may miscalculate the starting value of the tween. Related to https://gsap.com/community/forums/topic/38599-how-to-animate-object-fit/

- FIXED: if you create multiple SplitText instances on the same element inside a gsap.context() and then revert() that Context, it may not fully revert the element to its original state. See https://gsap.com/community/forums/topic/38734-splittext-innerwrap-renders-twice-in-strictmode/

- FIXED: if you set allowNestedScroll: true in the ScrollTrigger.normalizeScroll() feature, touch-scrolling on a link on a mobile device could result in a click event firing on that link. See https://gsap.com/community/forums/topic/38770-why-does-the-burger-menu-scroll-along-with-the-content-on-mobile/#comment-193009

- FIXED: if you set end: "max" or clamp() the end of a ScrollTrigger that has a pin, and the pinSpacing was extending the page taller, the dynamic adjustment of the end value would also affect the pinSpacing, reducing the maximum scroll area which then wouldn't be accurately reflected in the final end value.

- FIXED: if you define a stagger with grid: "auto" on an Array of elements that don't wrap at all (not really a grid), the last element's timing wouldn't be correct. See https://gsap.com/community/forums/topic/38536-when-scrolling-down-a-batch-the-stagger-doesnt-seem-to-work-correctly/

- FIXED: if you clamp() a ScrollTrigger's start value and it would naturally (without clamping) resolve to beyond the maximum scroll position, it wouldn't get clamped. Starting values were only clamped such that they weren't allowed to be negative (focused on the top of the page only, not the bottom too).

- FIXED: if you dynamically added/created a ScrollTrigger while ScrollSmoother was mid-scrub, it could lead to the scroll jumping. See https://gsap.com/community/forums/topic/37515-dynamic-scrolltrigger-with-pin-inside-a-scrollsmoother/

- FIXED: if you run SplitText on text that has words separated by non-breaking spaces (&nbsp;), it wouldn't recognize that as a word delimiter. See https://gsap.com/community/forums/topic/37271-why-does-the-splitted-node-from-splittext-includes-extra-whitespace-note-only-the-node-which-is-next-tag/

- FIXED: Flip.fit() is now gsap.context()-aware so that it'll revert inline styles when the context is reverted.

- FIXED: regression in 3.11 that could cause transformOrigin to lose its "z" portion if you apply it in a .from() or .fromTo() tween or a context that gets reverted. See https://gsap.com/community/forums/topic/38958-rotatey-not-working-in-nuxt/

- FIXED: if you call gsap.registerPlugin(Observer) multiple times, it could throw an error.

3.12.2

Toggle 3.12.2's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.2

- IMPROVED: on mobile devices where the address bar shows/hides and sometimes causes a jump after scrolling stops, particularly if there are multiple pins, ScrollTrigger now calculates positions based on 100vh instead of window.innerHeight because the former doesn't change whereas the latter does. This essentially avoids the "jump" in most cases (unless the elements on your page actually resize).

- IMPROVED: consolidated "scroll" event listeners in ScrollTrigger so fewer are added to the main document. Functionally it makes no difference, but there is at least one synthetic test online that would [incorrectly] complain.

- FIXED: regression in PixiPlugin caused an error related to filters. See greensock#541

- FIXED: regression in 3.12.0 caused ScrollTriggers that were applied to timelines inside a gsap.context() not to get reverted properly when revert() was called on the context. See https://greensock.com/forums/topic/37278-updating-to-312-3121-breaks-pinning/

- FIXED: if you insert a tween/callback into a timeline at a position EARLIER than where the playhead currently is, it may not render immediately, or if it's a callback it may fire on the next render when it actually shouldn't. See https://greensock.com/forums/topic/37218-timeline-trigger-all-callbacks-with-specific-timing-when-play/

- FIXED: regression in 3.12.0 caused an error in Draggable if you enable inertia and then disable() the Draggable instance. See https://greensock.com/forums/topic/37397-draggable-error-in-version-12-when-using-disable/

- FIXED: regression in 3.11.0 could cause a repeating tween/timeline to render at the wrong iteration if it was reversed and then a totalTime() was set that was beyond the first iteration.

- FIXED: if you revert() a gsap.context() that has a reversed animation that'd cause its startTime to be lower than -1 and it had .fromTo() tweens, the "from" revert happened out of order which might have left the starting values incorrect.

- FIXED: regression in 3.12.0 could cause a ScrollTrigger's snapping to act incorrectly in a very specific scenario, like if mid-scroll the start/end values change.

3.12.1

Toggle 3.12.1's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.1

- FIXED: For a ScrollTrigger with a containerAnimation, a regression in 3.12.0 caused values passed into .setPositions() to be interpreted as scroll positions instead of time values. See https://greensock.com/forums/topic/36910-horizontal-scrollsmoother-with-scrolltrigger-and-anchors/#comment-185615

- FIXED: Regression in 3.12.0 caused ScrollSmoother's "lag" feature not to function properly.

3.12.0

Toggle 3.12.0's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.12.0

- NEW: Ever had ScrollTriggered animations at the very top of your page start out partially-scrubbed? Now you can clamp() them! Wrap your ScrollTrigger start/end values with "clamp()" to prevent them from "leaking" outside the bounds of the page. They'll never start before a scroll position of 0, nor will they finish after the maximum scroll. Clamped ScrollTriggers make all your "above the fold" elements start off in their native positions.

- NEW: For ScrollSmoother, you can now wrap your data-speed value in "clamp()" to make the associated element start out in its natural position if it's within the viewport at the top of the page (meaning the resulting ScrollTrigger would otherwise have a negative start value), and it also will have the same effect if the element is at the very bottom of the page and the associated effect's ScrollTrigger would normally have an end value that exceeds the maximum scroll position. See https://greensock.com/forums/topic/36177-scrollsmoother-data-speed-and-firstlast-folds/

- NEW: ScrollSmoother officially recognizes a new "speed" property that you can use to make the page scroll faster or slower.

- IMPROVED: TypeScript string-based eases added to improve code hinting in some editors. See greensock#533

- IMPROVED: if you set dragClickables: false in a React app, since React adds an onclick handler on the root, things wouldn't be draggable. So having an onclick handler no longer causes something to be deemed "clickable". You can always use the clickableTest function if you'd like to run your own logic. See https://greensock.com/forums/topic/36854-using-a-handle-touchpoint-to-manipulate-a-draggable-object-allowing-for-form-interaction/

- IMPROVED: PixiPlugin now recognizes the new location for filters in Pixi version 7.1 and later. See https://greensock.com/forums/topic/36997-pixi-plugin-deprecation-v7/

- FIXED: regression in 3.11.5 could cause a motionPath tween to throw an error if the target is not a DOM element and you're animating transform-related properties like "x" or "y". See greensock#531

- FIXED: if a Flip-related tween is reverted when it is paused, it wouldn't clear out the inline styles properly. Related to this thread in the forums: https://greensock.com/forums/topic/36259-flip-resize/

- FIXED: ScrollSmoother might appear to jump slightly on the very first scroll in a specific situation. See https://greensock.com/forums/topic/35244-there-is-a-lag-with-page-scrolling-while-using-scrollsmoother/

- FIXED: Some frameworks like Vue make the value of Refs into Proxies, so when you store a gsap.context() or gsap.matchMedia() in a Ref and then revert() it (perhaps onUnmount()), the Proxy that the framework imposed interfered with GSAP's ability to match up the original object with the Proxy, so a matchMedia() may not get properly killed in some edge cases. See https://greensock.com/forums/topic/36313-use-matchmedia-with-scrolltrigger-pin-in-nuxt3-will-get-error-after-breakpoint-change/

- FIXED: if you create a timeline inside a gsap.context() with a callback like onComplete it may still get called after revert() is called on the context. Timelines are now properly killed in the context.revert() call. See https://greensock.com/forums/topic/35365-react-and-gsap-timelines-callbacks/

- FIXED: if you disable() a Draggable that's in the middle of an inertia animation, it'll kill() that animation.

- FIXED: in 3.11.5 if you set overflow-y: scroll on the <body> and you used ScrollTrigger to pin something on a page that natively doesn't have any scroll, it might horizontally size things slightly wrong (as if there was an extra scrollbar's worth of space).

- FIXED: if you set a "speed" on a ScrollSmoother and then the content resizes when the page is scrolled all the way to the bottom, it may jump the scroll position incorrectly. See https://greensock.com/forums/topic/36602-scrollsmoother-with-accordion-animation-makes-page-jump/

- FIXED: if you create a staggered tween inside a gsap.context() and then kill()/revert() the context, it could throw an error. See greensock#536

- FIXED: if you use selector text for an endTrigger of a ScrollTrigger that was created inside of a scoped gsap.context(), it may not honor that scope. See greensock#537

- FIXED: if you initiate a ScrollTriggered from() animation that has a stagger BEFORE ScrollSmoother is created, it may render incorrectly initially. See https://greensock.com/forums/topic/36777-scrollsmoother-splittext-nextjs/ and https://codepen.io/GreenSock/pen/eYPyPpd?editors=0010

- FIXED: if you create a ScrollSmoother AFTER already creating ScrollTriggers, and you revert() and then re-create the ScrollSmoother (sometimes happens in environments like Next.js), it may revert() those pre-existing ScrollTriggers even if they weren't created inside the context in which the ScrollSmoother was created. See https://greensock.com/forums/topic/36777-scrollsmoother-splittext-nextjs/

- FIXED: if you apply a ScrollTrigger to an element that also has data-speed and ScrollSmoother is controlling it, the end scroll position may be miscalculated. See https://greensock.com/forums/topic/36930-scrollsmoother-with-data-speed-causes-wrong-scrolltrigger-positions/

- FIXED: if you create a gsap.context() or gsap.matchMedia() inside a scoped gsap.context() (nested), it wouldn't honor the outer scope as the default.

- FIXED: a regression in 3.11.x could cause timeline event callbacks and onEnter/onLeave ScrollTrigger callbacks not to fire properly on a ScrollTrigger-scrubbed timeline when the page is reloaded after scrolling down (scroll restoration). See greensock#538

- FIXED: if you use data-speed="auto" on an element with ScrollSmoother, a very specific aspect ratio could cause the element to move in the wrong direction. See https://greensock.com/forums/topic/37185-issues-with-scrollsmoother-for-images-past-a-certain-width/

3.11.5

Toggle 3.11.5's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.11.5

- IMPROVED: if you set up an animation with a ScrollTrigger based on a containerAnimation and it has a negative start position (happens BEFORE the containerAnimation), it will render it initially at the spot where the containerAnimation begins (to avoid a jump). See https://greensock.com/forums/topic/35184-gsap-horizontal-scroll-with-parallax-need-to-figure-the-first-element-parallax-position-before-the-scroller-pins-and-animation-starts/

- IMPROVED: if you try using MotionPathPlugin.getPositionOnPath() on a RawPath that hasn't had cacheRawPathMeasurements() on it, now it'll automatically call that for you rather than throwing an error.

- IMPROVED: GSDevTools is context-aware now.

- IMPROVED: Draggable now saves the target's original inline styles (transform/top/left) and then reverts them when its revert() method is called (and it works with gsap.matchMedia() and gsap.context()). See https://greensock.com/forums/topic/35287-gsapmatchmedia-draggable-not-reverting/

- IMPROVED: ScrollSmoother will automatically watch for when the content element resizes and check to see if the current scroll position is greater than the new maximum and adjust things accordingly. See https://greensock.com/forums/topic/32353-scrollsmoother-not-refresh-the-page-height-when-accordion-is-openclosed/#comment-179179

- IMPROVED: ScrollTrigger.normalizeScroll() will now automatically cancel its momentum-based scroll on mobile devices when it senses that something else changed the scroll (like if you do a scrollTo tween). It also cancels it when there's a touchmove event. See https://greensock.com/forums/topic/35970-scrolltrigger-makes-jump-on-mobile-vertical-fullscreen-slider/

- IMPROVED: better compatibility with worker and SSR environments by delaying the auto-registration of CSSPlugin internally if the window doesn't exist yet. See greensock#524

- FIXED: if you set a "speed" that's not 1 directly on a ScrollSmoother instance, the .offset() or scrollTo() methods wouldn't factor that into the results. See https://greensock.com/forums/topic/35108-problems-with-the-scrollsmoother-plug-in-speed-option-in-gsap-3114/

- FIXED: in some browsers (like Firefox), screen repaints weren't consistent (seemingly the scroll thread and main thread got out of sync sometimes) unless we put SOMETHING (anything, even an empty function) into the requestAnimationFrame() queue at all times. So ScrollTrigger does that now as a workaround.

- FIXED: ScrollTrigger.normalizeScroll() may still allow "jitter" in some cases like on Android with a pinType that's "transform"...but that has been resolved now. See https://greensock.com/forums/topic/35157-scrolltrigger-pinning-causes-jitter-when-using-touch-on-safari/

- FIXED: if you applied an onUpdate to a tween that's a containerAnimation for a ScrollTrigger, "this" (the scope) inside that function wouldn't properly refer to the animation instance itself.

- FIXED: a regression in 3.11.4 could cause ScrollSmoother to initially jump slightly (on the very first scroll movement). See https://greensock.com/forums/topic/35244-there-is-a-lag-with-page-scrolling-while-using-scrollsmoother/

- FIXED: if you set a negative delay on an animation and then invert the timeScale to a negative value and then change it again, it could adjust the startTime incorrectly. See https://greensock.com/forums/topic/35243-reversed-animation/

- FIXED: (regression in 3.11.4) if a ScrollSmoother was resized after being scrolled, it may jump to a scrolled position and back again (see https://greensock.com/forums/topic/35529-scrollsmoother-strange-behavior-when-resizing-a-window/)

- FIXED: if you right-click (context menu) on an Observer's target, it would act as though the pointer stays down (dragging) after the context menu is released. Now it'll ignore the event if its "button" value is truthy. See https://greensock.com/forums/topic/35505-strange-behaviour-with-observer/

- FIXED: if you apply snapping to a ScrollTrigger and dynamically recreate it after scrolling, it could incorrectly restore the scroll position. See https://greensock.com/forums/topic/35545-%F0%9F%9A%92-need-help-with-scrolltrigger-refresh-events

- FIXED: if a ScrollSmoother's content resized, it would [correctly] call a refresh() but any ScrollTriggers that had a scrub applied may inadvertently start again from their beginning at that point. See https://greensock.com/forums/topic/35536-smoothscroller-ignoremobileresize-for-non-touch-devices

- FIXED: if you set a "speed" on a ScrollSmoother instance (other than 1) and then toggle paused() true/false, it could render the page at the wrong position. See https://greensock.com/forums/topic/35612-scrollsmoother-speed-option-bug-in-gsap-3114/

- FIXED: a regression in 3.11.3 caused ScrollTriggers with a pinnedContainer and pin defined to sometimes not pin initially in a particular edge case.

- FIXED: a regression in 3.11.2 could cause ScrollTriggers with a numeric scrub value to initially jump to their starting position and then scrub on the very first onEnter. See https://greensock.com/forums/topic/35725-nested-scrolltrigger-doesnt-seem-to-be-initializing-properly

- FIXED: if you have a repeating timeline with yoyo: true and you also have a non-zero repeatDelay and repeatRefresh: true, it would skip the repeatRefresh See https://greensock.com/forums/topic/18961-positioning-elements-along-a-bezier-curve

- FIXED: if you set a repeat on a timeline that had repeatRefresh: true and it had an onStart callback, that onStart would be called on each iteration instead of only on the first one.

- FIXED: if you Flip.fit() an element that has 3D transforms (particular rotations), it could cause the matrix3d() to get re-interpreted in a way that'd change the mix of rotations/scales which would technically look exactly the same, so visually nothing would change but the values themselves could be different. See https://greensock.com/forums/topic/35803-using-flipfit-with-3d-rotation/#comment-179207

- FIXED: ScrollTrigger.maxScroll() won't return a negative value (like if the viewport is taller than the content).

- FIXED: if ScrollSmoother is applied to a page and the content resizes, pointer-events: none was temporarily set on the wrapper and then reverted to work around an iOS browser bug, but that could cause pointer events to fire again, like mouseenter. So we've opted for a different workaround in that case.

- FIXED: if ScrollTrigger.normalizeScroll() was enabled on a page that used ScrollSmoother with smoothTouch enabled, on touch devices it may intermittently seem like the scroll position isn't getting updated (temporarily). See https://greensock.com/forums/topic/35826-problems-with-scrollsmoother-3115-beta-on-touch-screen-devices/

- FIXED: if you animate a camelCased CSS variable in a from() or fromTo() animation, a regression in 3.11.0 could cause it to seem "stuck". See https://greensock.com/forums/topic/31518-how-to-get-after-pseudo-element/?do=findComment&comment=179817

- FIXED: if you define a containerAnimation on a ScrollTrigger and use a numeric value for "start", it wouldn't interpret that as a scroll position properly. If you use a relative value for "end" like "+=500" when the start is numeric, it wouldn't be interpreted properly either. See https://greensock.com/forums/topic/36004-horizontal-scroll-section-with-absolutely-positioned-sidebar-issues-with-resizing/

- FIXED: a ScrollTrigger that has a containerAnimation may not render at the correct position on the very first render after a refresh() (but scrolling even once would correct it). See https://greensock.com/forums/topic/36004-horizontal-scroll-section-with-absolutely-positioned-sidebar-issues-with-resizing/

- FIXED: if you apply a ScrollTrigger to a page that has no scrollable content (no scrollbar), but the ScrollTrigger adds pinSpacing that would create a scrollbar, it now adjusts for that scrollbar space (previously the pin-spacer may have a width that reflects the width of the viewport without the scrollbar). See https://greensock.com/forums/topic/36019-scrolltrigger-during-horizontal-scroll-border-is-hidden-under-scrollbar/

- FIXED: if you define a pinnedContainer on a ScrollTrigger and a ScrollTrigger.refresh() occurs (like on window resize) when scrolled beyond where the pinning occurs, the start/end of the ScrollTrigger may be miscalculated. See https://greensock.com/forums/topic/35987-scrolltoplugin-and-scrolltrigger-with-scrub-not-getting-along/?do=findComment&comment=180473

- FIXED: For ScrollTrigger.normalizeScroll() on an iOS device, in a very rare case (typically when the page is inside an iframe), scrolling could appear to vibrate very quickly between a "stuck" state and the "real" state.

3.11.4

Toggle 3.11.4's commit message

Verified

This commit was signed with the committer’s verified signature. The key has expired.
jackdoyle Jack Doyle
3.11.4

- IMPROVED: SplitText, Draggable, and Observer are all now gsap.context()-aware. So for example if you SplitText within a context and then .revert() that context, the SplitText will also get reverted. And any Observer/Draggable that's created in a gsap.context() will get killed when that context gets reverted.

- FIXED: added MotionPathHelper's kill() method to the TypeScript definitions

- FIXED: if you pause a ScrollSmoother on a mobile/touch device that doesn't use touch events, it could trigger a "click" event when releasing the pointer/touch. See https://greensock.com/forums/topic/34265-scrollsmoother-causes-touch-scrolling-to-trigger-link-click/

- FIXED: in a very unusual scenario, a .fromTo() tween might render incorrectly for one tick. See https://greensock.com/forums/topic/34175-animation-flickering-using-fromto-opacity-transform/

- FIXED: if you animate the scaleY to a different value than scaleX and then subsequently you animate scale (not x or y), it would use the scaleX for the starting value for scaleY too. See https://greensock.com/forums/topic/34300-possible-bug-with-transform-origin/

- FIXED: when the Flip animation is finished, Flip now removes the scale, translate, and rotate inline CSS properties that are added during the flip to prevent CSS rules from contaminating transforms.

- FIXED: in a very rare circumstance if you omit the <meta name="viewport" content="width=device-width, initial-scale=1.0"> in the head on an iOS device, a ScrollTrigger that pins an element that originally had a transform may render it incorrectly. See https://greensock.com/forums/topic/34293-safari-ios-hides-pinned-div-in-odd-pinning-scenario/

- FIXED: of you set allowNestedScroll: true on ScrollTrigger.normalizeScroll(), it wouldn't always work if the event was dispatched by an element inside a container that wasn't scrollable but an ancestor was. Alternate solution: https://greensock.com/forums/topic/32836-scrolltriggernormalizescrollallownestedscroll-true-with-scrollable-div/

- FIXED: if you set a ScrollTrigger's pinReparent to true and resize the viewport while that ScrollTrigger is active, it may render incorrectly. See https://greensock.com/forums/topic/34400-react-useeffect-re-rendering-a-timeline/

- FIXED: if you set gsap.ticker.lagSmoothing(false) the timing mechanism could fail after about 27 hours straight. See https://greensock.com/forums/topic/34544-gsap-3-stops-working-after-2-3-days/

- FIXED: ScrollToPlugin is now ScrollTrigger-aware so that it calls ScrollTrigger.update() after rendering which can prevent slight jumps/flashes when pinning, as described at https://greensock.com/forums/topic/31468-navigation-in-mixed-scrolling-horizontal-vertical/

- FIXED: if you disable() a Draggable instance, its onClick event would still fire. See https://greensock.com/forums/topic/34675-click-event-on-draggable-svg-element-still-fires-after-disable-and-kill/

- FIXED: if you set allowNestedScroll: true in ScrollTrigger's (or ScrollSmoother's) normalizeScroll option, it may not work on horizontally-scrolling elements. See https://greensock.com/forums/topic/34672-scroll-with-trackpad-and-touchpad-on-overflow/

- FIXED: on some Android devices, if you apply snapping to a ScrollTrigger that does pinning, it might occasionally appear to unpin for a brief moment. See https://greensock.com/forums/topic/34703-scrollsmoother-scrolltrigger-snapping-causing-jankiness-in-a-pinned-element

- FIXED: ScrollTrigger.killAll() may leave some instances alive. See https://greensock.com/forums/topic/35012-scrolltrigger-killall-is-buggy/

- FIXED: if you create a fromTo() tween in a timeline that's inside a gsap.context() and you set immediateRender: false on that .fromTo() and then force the playhead to the end and back again, when the context reverts it may render incorrectly.

- FIXED: if you use selector text for a SplitText inside a gsap.context() that had a scope defined, it wouldn't limit the scope accordingly. See https://greensock.com/forums/topic/35061-selector-leak-outside-scope-with-splittext-plugin-inside-gsapcontext-in-react/