{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":5905330,"defaultBranch":"master","name":"GSAP","ownerLogin":"greensock","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2012-09-21T18:03:25.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2386673?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1705616597.0","currentOid":""},"activityList":{"items":[{"before":"3d86e43c3f47951482f76397023630d2d8960806","after":"f836a3f0002d6ea00f456a461c7e2976e0ec3f38","ref":"refs/heads/master","pushedAt":"2024-01-18T22:23:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.12.5\n\n- 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.\n\n- IMPROVED: removed a DisplayObject check in PixiPlugin so that it's more compatible with the upcoming release of Pixi.js version 8. See https://github.com/greensock/GSAP/issues/561\n\n- 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/\n\n- 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 https://github.com/greensock/GSAP/issues/567\n\n- 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\n\n- 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/\n\n- 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 https://github.com/greensock/GSAP/issues/558\n\n- 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/\n\n- 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/\n\n- FIXED: if the system clock changes backwards to an earlier time, it could cause animations to stop. See https://github.com/greensock/GSAP/issues/568\n\n- 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.\n\n- FIXED: missing TypeScript parameter for ScrollTrigger.clearScrollMemory(). See https://github.com/greensock/GSAP/issues/571\n\n- 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/\n\n- 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/","shortMessageHtmlLink":"3.12.5"}},{"before":"641da46ecb8b04273c02656c1bfd05de941dc351","after":"3d86e43c3f47951482f76397023630d2d8960806","ref":"refs/heads/master","pushedAt":"2023-12-14T22:14:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.12.4\n\n- 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/\n\n- FIXED: overwriting a scrollTo tween in such a way that didn't leave any more properties tweening, onInterrupt() wasn't invoked.\n\n- FIXED: SplitText TypeScript definitions file needed an \"elements\" property. See https://github.com/greensock/GSAP/issues/564\n\n- 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/\n\n- 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 https://github.com/greensock/GSAP/issues/563","shortMessageHtmlLink":"3.12.4"}},{"before":"6032c54a21981b389a5f5603a45083f38ed5acf9","after":"641da46ecb8b04273c02656c1bfd05de941dc351","ref":"refs/heads/master","pushedAt":"2023-11-30T04:57:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.12.3\n\n- 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.\n\n- 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 https://github.com/greensock/GSAP/issues/551\n\n- 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/\n\n- 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/\n\n- IMPROVED: slight change to TypeScript definitions for EaseString allows arbitrary strings while also activating code hinting for the common ones in more environments. See https://github.com/greensock/GSAP/issues/556\n\n- 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/\n\n- 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/\n\n- IMPROVED: the gsap-trial files will now work on domains that end in \".local\" (for testing only please)\n\n- 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/\n\n- 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/\n\n- FIXED: if Draggable is applied to an where the document isn't defined initially, an error could be thrown. See https://github.com/greensock/GSAP/issues/549\n\n- 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/\n\n- 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.\n\n- 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/\n\n- 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.\n\n- 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.\n\n- FIXED: if you call kill() or revert() on a MotionPathHelper in certain specific conditions, it may delete the original itself.\n\n- FIXED: worked around a very rare scenario where document.createElement() returns undefined and would consequently throw an error in CSSPlugin. See https://github.com/greensock/GSAP/issues/553\n\n- 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.\n\n- 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/\n\n- 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/\n\n- 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\n\n- 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.\n\n- 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/\n\n- 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).\n\n- 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/\n\n- FIXED: if you run SplitText on text that has words separated by non-breaking spaces ( ), 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/\n\n- FIXED: Flip.fit() is now gsap.context()-aware so that it'll revert inline styles when the context is reverted.\n\n- 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/\n\n- FIXED: if you call gsap.registerPlugin(Observer) multiple times, it could throw an error.","shortMessageHtmlLink":"3.12.3"}},{"before":"472d4170d4aa3cceb8a3880d7cad700f22fbc545","after":"6032c54a21981b389a5f5603a45083f38ed5acf9","ref":"refs/heads/master","pushedAt":"2023-06-28T18:35:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.12.2\n\n- 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).\n\n- 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.\n\n- FIXED: regression in PixiPlugin caused an error related to filters. See https://github.com/greensock/GSAP/issues/541\n\n- 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/\n\n- 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/\n\n- 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/\n\n- 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.\n\n- 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.\n\n- 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.","shortMessageHtmlLink":"3.12.2"}},{"before":"9e02ad9d4a7e6f72dfa44edb940b2e5ec5d2b9fb","after":"472d4170d4aa3cceb8a3880d7cad700f22fbc545","ref":"refs/heads/master","pushedAt":"2023-06-07T17:18:10.226Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.12.1\n\n- 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\n\n- FIXED: Regression in 3.12.0 caused ScrollSmoother's \"lag\" feature not to function properly.","shortMessageHtmlLink":"3.12.1"}},{"before":"631311c2cabd77a3feb40b562b52a6a358e9785c","after":"9e02ad9d4a7e6f72dfa44edb940b2e5ec5d2b9fb","ref":"refs/heads/master","pushedAt":"2023-06-06T19:50:08.309Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.12.0\n\n- 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.\n\n- 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/\n\n- NEW: ScrollSmoother officially recognizes a new \"speed\" property that you can use to make the page scroll faster or slower.\n\n- IMPROVED: TypeScript string-based eases added to improve code hinting in some editors. See https://github.com/greensock/GSAP/issues/533\n\n- 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/\n\n- 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/\n\n- 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 https://github.com/greensock/GSAP/issues/531\n\n- 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/\n\n- 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/\n\n- 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/\n\n- 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/\n\n- FIXED: if you disable() a Draggable that's in the middle of an inertia animation, it'll kill() that animation.\n\n- FIXED: in 3.11.5 if you set overflow-y: scroll on the 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).\n\n- 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/\n\n- FIXED: if you create a staggered tween inside a gsap.context() and then kill()/revert() the context, it could throw an error. See https://github.com/greensock/GSAP/issues/536\n\n- 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 https://github.com/greensock/GSAP/issues/537\n\n- 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\n\n- 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/\n\n- 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/\n\n- 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.\n\n- 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 https://github.com/greensock/GSAP/issues/538\n\n- 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/","shortMessageHtmlLink":"3.12.0"}},{"before":"b357b544eda95770bd93c732549670c155d7d154","after":"631311c2cabd77a3feb40b562b52a6a358e9785c","ref":"refs/heads/master","pushedAt":"2023-03-17T15:22:30.428Z","pushType":"push","commitsCount":1,"pusher":{"login":"jackdoyle","name":"Jack Doyle","path":"/jackdoyle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2389714?s=80&v=4"},"commit":{"message":"3.11.5\n\n- 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/\n\n- 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.\n\n- IMPROVED: GSDevTools is context-aware now.\n\n- 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/\n\n- 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\n\n- 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/\n\n- IMPROVED: better compatibility with worker and SSR environments by delaying the auto-registration of CSSPlugin internally if the window doesn't exist yet. See https://github.com/greensock/GSAP/issues/524\n\n- 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/\n\n- 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.\n\n- 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/\n\n- 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.\n\n- 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/\n\n- 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/\n\n- 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/)\n\n- 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/\n\n- 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\n\n- 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\n\n- 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/\n\n- 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.\n\n- 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\n\n- 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\n\n- 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.\n\n- 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\n\n- FIXED: ScrollTrigger.maxScroll() won't return a negative value (like if the viewport is taller than the content).\n\n- 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.\n\n- 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/\n\n- 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\n\n- 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/\n\n- 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/\n\n- 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/\n\n- 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\n\n- 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.","shortMessageHtmlLink":"3.11.5"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAD43iROwA","startCursor":null,"endCursor":null}},"title":"Activity ยท greensock/GSAP"}