Skip to content

Tags: humayunkabir/GreenSock-JS

Tags

1.20.2

Toggle 1.20.2's commit message
1.20.2

- FIXED: TextPlugin had a regression in 1.20.0/1.20.1 that caused it not to work properly. That's resolved now.

(Typically we batch more changes together, but this update was necessary in order to make TextPlugin work again so it warranted the minor release. CDNs and NPM won’t allow file revisions.)

1.20.1

Toggle 1.20.1's commit message
1.20.1

- NEW: added "combineCMF" (as in "combine ColorMatrixFilter") special property to PixiPlugin. When set to true, the newly applied ColorMatrixFilter will preserve any previously-set "hue", "saturation", "brightness", "contrast", and "colorize" values. So if you desaturate the image and then increase brightness you will get a very bright grayscale image.

- FIXED: PixiPlugin was maintaining previously-set hue/saturation/brightness/contrast/colorize values incorrectly, even when colorMatrixFilter:null was passed in, which could lead to unintuitive results.

- FIXED: PixiPlugin previously acted as if combineCMF was true by default (though that property didn't exist), so effects might be combined when the user didn't intend that.

- IMPROVED: CSSRulePlugin now finds rules if you use double-colons instead of single-colons, like .youClass::before instead of .yourClass:before (either should work now)

- FIXED: if you have an addPause() at the very end of a repeating TimelineMax, it is honored (a regression in 1.19.1 caused it not to be honored in that very specific case).

- FIXED: some of the changes in the minified files weren't included in the github and NPM repos.

1.20.0

Toggle 1.20.0's commit message
1.20.0

- NEW: if you want to define a different ease for the "yoyo" part of a repeating tween, simply use the new "yoyoEase" special property. For example, {...ease: Power2.easeOut, yoyoEase: Back.easeOut}. Set it to true to have it simply mirror the regular ease, meaning {ease: Power2.easeOut, yoyoEase:Power2.easeOut} is the same as {ease: Power2.easeOut, yoyoEase: true}

- NEW: animate CSS variables, like {"--your-css-variable":"20px"}

- NEW: PixiPlugin for making it easier to animate PIXI.js objects. For example, PIXI defines position values like target.position.x and target.position.y, and scale is target.scale.x and target.scale.y, etc. That's cumbersome because to tween the position and scale, you'd have to use two different tweens since the targets are different, like TweenMax.to(target.position, 1, {x:100, y:200}) and TweenMax.to(target.scale, 1, {x:0.5, y:0.6}). With the plugin, it'd be as simple as TweenMax.to(target, 1, {pixi:{x:100, y:200, scaleX:0.5, scaleY:0.6}}). It also defines rotation in degrees instead of radians (most people find degrees much more intuitive). It handles any of the following special properties: x, y, scaleX, scaleY, scale, anchorX, anchorY, anchor, pivotX, pivotY, pivot, or any other standard property. As a convenience, "positionX" and "positionY" are aliases for "x" and "y". It also handles ColorMatrixFilter and BlurFilter animations, as well as greatly expanding the color capabilities. See http://greensock.com/docs/Plugins/PixiPlugin

- NEW: SteppedEase has an optional "immediateStart" parameter for making the initial jump/step happen immediately. Simply pass true as the 2nd parameter, like SteppedEase.config(15, true);

- NEW: Draggable recognizes an "allowContextMenu" special property that's false by default so that it suppresses context menus on Draggable elements. You can enable them by setting it to true.

- IMPROVED: Complex CSS are parsed better, like filter:drop-shadow(...). This doesn't mean filters are fully supported, but if the beginning and ending values are formatted identically (number of and order of parameters) it should work.

- IMPROVED: when adding an animation a timeline that contains an infinitely-repeating animation, instead of defaulting to adding it at the very end (which would be almost infinitely in the future), it'll use the most recently-added child's endTime as the default insertion point instead. Much more intuitive.

- IMPROVED: 3D transforms are more accurately decomposed (when you set the original in CSS). Specifically, skew is recognized in 3D transforms.

- IMPROVED: DrawSVGPlugin now works around a bug in Microsoft Edge browsers that don't render updates to the stroke when the stroke-linecap is anything other than "butt" (like "round").

- IMPROVED: MorphSVGPlugin.convertToPath() works on a <line> even if you omit one of the attributes like x1, x2, y1, or y2.

- IMPROVED: implemented setTimeout().unref() for node environments

- IMPROVED: the internal timeout that kick-starts the ticker in rare cases when the browser doesn't fire a requestAnimationFrame properly now has an extra workaround that checks to see if the tab isn't active/visible.

- FIXED: If you change the startTime() of an animation that has already rendered and it's inside a timeline, it wouldn't be triggered to render until the parent playhead passes that animation.

- FIXED: onUpdate wasn't fired on the very first render of a fromTo() tween.

- FIXED: regression in 1.19.1 caused relative attribute tweens (like cx:"+=300") not to work properly.

- FIXED: Draggable rounded x/y values which in some cases (like in an SVG that was zoomed-in) wasn't desireable.

- FIXED: If killTweensOf() or getTweensOf() was called for a target that was never animated AND the ticker has powered down, it could retain a reference to that target until the ticker starts again (for any animation).

- FIXED: worked around a Firefox bug (http://codepen.io/anon/pen/WpROEx) that mis-reports SVG.getScreenCTM() in a very particular scenario, causing Draggable not to function correctly. (Very rare)

- FIXED: if you have a fromTo() tween on a timeline and put the playhead directly at its starting point and then somewhere before that, the "from" won't be triggered to render (extremely rare).

- FIXED: if you animate to a lineHeight without a unit (like "5" instead of "5px"), it now works correctly.

- FIXED: if ScrollToPlugin is passed a number as a string (like scrollTo:{y:"300"}), it is now interpreted as a number rather than selector text.

- FIXED: when an element has CSS of display:none, Webkit browsers incorrectly report its computed style transform as "none" (even if it has transforms applied), and Firefox/IE/Edge report it correctly EXCEPT percentage-based values (so translate(-50%, 8px) would become translate(0, 8px)). So every browser has buggy behavior (but different). GSAP implemented a workaround in this condition to normalize behavior across all browsers.

- FIXED: In very rare cases a CSS property may not be rendered properly (if there was a priority-based CSS value tweening along side another). Again, extremely rare (in fact, nobody reported any issues).

- FIXED: clearProps could, in extremely rare situations, prevent other CSS properties in the same tween from rendering properly (linked list ordering issue).

- FIXED: Worked around a Microsoft Edge bug that could cause MorphSVGPlugin.convertToPath() not to render correctly (attributes must be set with lowercase names for Edge to play ball).

- NEW: TextPlugin now supports Emoji characters ;)

- FIXED: worked around Chrome bug that would cause touch-action of pan-y|pan-x|none not to be respected on Draggable SVG elements. Now we apply it to the parent SVG root too.

- FIXED: relative hsl() or hsla() color tweens didn't set the final value correctly (regression in 1.19.1).

- FIXED: a Draggable of type "rotation" that targets an SVG element may behave as if the rotation origin is in a different place than it should be.

- FIXED: Microsoft browsers incorrectly report percentage-based width/height of a position:relative child elements of display: flex elements (reports them as 0), so we implemented a workaround.

- FIXED: If you defined your own GreenSockGlobals object and loaded ColorPropsPlugin from GSAP 1.19.0 or 1.19.1, it could result in an error.

- FIXED: If a tween is killed from within the onComplete or onUpdate callback of the tween that renders immediately before (in the linked list) and only on the root timeline, it would render one last time even though it shouldn't. (EXTREMELY rare).

1.19.1

Toggle 1.19.1's commit message
1.19.1

Replacing 1.19.1 tag primarily to fix a bower.json issue, but pasting all the 1.19.1 changes below for convenience:
——

- NEW: Draggable offers new snapping capabilities; simply provide a "points" array (objects with "x" and "y" properties) to which it should snap. You can even define a "radius" so that it'll only snap when it's within a certain distance (px). Example:

	Draggable.create("#id", {
	  type:"x,y",
	  liveSnap:{
		points:[{x:0,y:0}, {x:100, y:200}, {x:400, y:100}],  //array of x/y values to snap to
		radius:50  //only snap within 50px
	  }
	});

	Or instead of an array of points, you can provide a function which will be passed one argument - an object with "x" and "y" properties representing the current values. You then return a similarly-formatted object with whatever x/y values you want. This way, you have total control over how snapping occurs. Previously, you could define separate functions for "x" and "y", but it was very challenging to run logic that requires both x and y at the same time; this new feature makes it extremely easy.

- NEW: Draggable has new "deltaX" and "deltaY" properties indicating the change in position since the last render/drag.

- NEW: Draggable has new "startX" and "startY" properties indicating the starting position (when the most recent drag began).

- IMPROVED: The NPM package now has all of the uncompressed files in the root to make importing easier, especially for the tools that aren't included inside TweenMax like Draggable. For example, you could do this in a commonjs-based (node) environment:

	 import Draggable from "gsap/Draggable";
	 import {TweenLite, Power2, TimelineMax, TweenMax} from "gsap";

- IMPROVED: DrawSVGPlugin accommodates vector-effect="non-scaling-stroke" on shapes.

- IMPROVED: EaselPlugin now accommodates animating a MovieClip to a particular frame label (rather than only frame numbers). Like TweenLite.to(mc, 1, {easel:{frame:"yourLabel"}});

- IMPROVED: worked around Firefox bugs that caused SVG <mask> elements inside <defs> not to transform properly (like if you animate the x, y, scaleX, scaleY, rotation, etc.).

- IMPROVED: DrawSVGPlugin works better with elements whose width/height are defined in non-px values, like %.

- IMPROVED: worked around errors that could be thrown when using GSAP in a server-only environment where there is no "document" or "window".

- FIXED: The 2 "cycle" parameters that were fed to function-based values were flip-flopped (only) in the TimelineMax stagger methods (target then index instead of vice-versa).

- FIXED: ScrollToPlugin is now exposed on the global scope.

- FIXED: In a very rare situation, Draggable could miscalculate the global origin around which the element spins. (CSSPlugin had a performance optimization that leveraged a "_gsCache" object for recording widths, and Draggable leveraged a similarly named object).

- FIXED: Worked around a Firefox bug that misreports the position of the origin of SVG elements that have a width and height of zero.

- FIXED: liveSnap was previously implemented on mousedown/touchstart on a Draggable rather than only when dragging starts.

- FIXED: Draggable with type:"scrollLeft" would prevent vertical touch-scrolling in iOS browsers.

- FIXED: If the initial state of an SVG had its scale at exactly 0 and it also had a data-svg-origin attribute, it wouldn't scale up properly.

- FIXED: function-based values for "scale" on DOM elements didn't correctly apply to both scaleX and scaleY.

- IMPROVED: Transforms are always applied to the "transform" attribute of SVG elements across all browsers now for consistency (previously the default was to use CSS transforms only in Chrome because it technically offered more options, like 3D, but the current SVG spec itself doesn't support that).

- FIXED: Worked around a Firefox issue that caused svgOrigin not to work as expected if transform-origin is previously set in CSS.

- FIXED: If there was an invalid (or basically invisible) arc command in an SVG path string, it could throw an error in MorphSVGPlugin but now it silently skips it.

- FIXED: If a child is removed from a TimelineLite/Max whose last child (in terms of startTime) is set to start BEFORE the current time on that timeline, it would jump its time to the end.

- NEW: ScrambleTextPlugin has a new rightToLeft option that you can set to true in order to make the text unscramble from right-to-left.

- FIXED: If the beginning and ending value **types** were different (like obj.value was a string but you try tweening to a Boolean or number, for example), it wouldn't work properly.

- FIXED: If MorphSVGPlugin.convertToPath() was called on an element whose selector name had 3 or more numbers, and selector text was used to identify it in the "shape" for the tween, it could fail.

- FIXED: iOS Safari 10+ was mis-identified as being version 6 or less (thus some bux fixes were applied when not necessary).

- FIXED: new touch-related behavior in Chrome caused Draggable not to work occasionally when type:"x" or type:"left" was used (alone) and the user started dragging vertically instead of horizontally (interpreted as an attempt to touch-scroll).

- FIXED: if you define an onStart in a TimelineMax.tweenFromTo(), there was a recursion error.

- FIXED: if the playhead landed between 0 and 0.0000001 on a zero-duration tween playing in reverse, it could render at its end state instead of beginning state.

- FIXED: creating a CustomEase where the final segment is a straight vertical line now renders at the end value properly.

1.19.0

Toggle 1.19.0's commit message
1.19.0

- NEW: You can define most values dynamically using a function as the value, like:

TweenMax.to(".class", 1, {x:function() {
	return Math.random() * 1000; //will randomize x between 0 and 1000
}});

The function will be called once for each target in the tween when it renders the first time. This can be very useful for randomizing things or applying conditional logic. The index number is passed as the first parameter, and the target is the second.

- NEW: ModifiersPlugin allows you to modify the tweening values just before they get applied on each tick, making it easy to create complex effects like wrapping values using modulus, rounding in whatever way you want, etc. For example:

TweenMax.to(".class", 1, {x:1000, y:600, modifiers:{
		x: function(value, target) {
            return value % 100; //wraps the value at 100.
        },
        y: function(value, target) {
        	return Math.round(value / 100) * 100; //rounds to the closest 100
        }
	}
});

- NEW: ScrollToPlugin now recognizes selector text (or a DOM element or jQuery object) as the value so that instead of passing in a number for the scroll position, you just pass it the element itself that you want to scroll into view. For example, TweenMax.to(window, 2, {scrollTo:"#someID"}) or TweenMax.to(window, 2, {scrollTo:{y:".someClass", x:"#someID"}}); You can also optionally pass "offsetX" and/or "offsetY" numeric values if you want to offset the destination from the element (like to give it a little breathing room). For example, scrollTo:{y:"#someID", offsetY:50} would scroll #someID into view with 50 pixels from the top (like a margin).

- NEW: ScrollToPlugin exposes a getOffset() method that returns an object with "x" and "y" properties corresponding to the amount of offset from the container. For example, ScrollToPlugin.getOffset(element, window) might return {x:0, y:310}.

- NEW: You can set ScrollToPlugin.autoKillThreshold (default is 7) which determines how many pixels the scroll position must drift before triggering the autoKill (like if the user starts scrolling while a scrollTo tween is in-progress).

- NEW: SplitText recognizes a new "wordDelimiter" special property that lets you set something other than a space as the delimiter between words, like: var split = new SplitText("#someID", {wordDelimiter:"#"}). Any non-space delimiter will be removed from the final output (it's only used as a delimiter).

- NEW: you can optionally pass in span:true in a SplitText config object to have it use <span> tags instead of <div> tags for wrapping.

- IMPROVED: TimelineMax's tweenTo() and tweenFromTo() methods can now accommodate "repeat", "yoyo", and "repeatDelay" properties in the vars object as long as TweenMax is loaded.

- IMPROVED: slight performance boost for callbacks with fewer than 3 parameters

- FIXED: in 1.18.5 we changed to a relative AMD path value for dependencies which caused some headaches for users of RequireJS so we reverted back to declaring dependencies in the simple absolute format like "TweenLite" (whereas in 1.18.5 it was "../TweenLite" in plugins). This makes it easier to just declare your own paths in tools like RequireJS.

- FIXED: issue that could cause TweenLite and/or some eases not to be exported properly from TweenMax in a Node environment on the module.exports.

- FIXED: if a "tick" listener is added to TweenLite.ticker from within another "tick" event handler, there is no longer a risk that one could be skipped in that rendering cycle.

- FIXED: regression since 1.18.1 that could cause a link (<a>) not to redirect the browser on iOS (only) when the user tapped without dragging and dragClickables was true.

- FIXED: issue that could cause skewY with skewType:"simple" not to work as expected (stretched as well a skewed).

- FIXED: worked around a bug in Safari that caused the vertical portion of backgroundSize to default to 0.

- FIXED: TextPlugin works now with SVG <text> nodes in Microsoft Edge

- FIXED: worked around an inconsistency in Chrome that caused a Draggable of type "scroll" not to scroll to the right properly when dragged left.

- FIXED: Draggable in 1.18.1 through 1.18.5 sometimes didn't handle the native click behavior on iOS Safari properly when dragClickables was true, so toggling a checkbox wouldn't work for example. That's fixed now.

- FIXED: Draggable's liveSnap feature didn't work properly during the "throw" phase since version 1.18.0

- FIXED: if killTweensOf() was called on a tween that was performing an autoRotate bezier tween on a DOM element, and "rotation" was targeted, it wouldn't kill that part of the tween properly.

- FIXED: Apparently bower imposes a 140 character limit in the bower.json description, so we shortened it.

- CHANGED: for function-based values passed to the "cycle" feature of the stagger methods, the target is now passed as the 2nd parameter instead of scoping the function call to the target. In other words, "this" inside the function used to refer to the target, but not any longer - instead, the target is specifically passed in as the 2nd parameter.

- REMOVED: KineticPlugin (KineticJS was discontinued a long time ago, so it was time to sunset this plugin)

1.18.5

Toggle 1.18.5's commit message
1.18.5

- NEW: the "cycle" feature of the stagger methods can now recognize a "duration" property, thus you can have complete control over varying durations as well (array-based or function-based).

- NEW: Draggable.update() accepts a 2nd parameter, "sticky" (boolean) that you can set to true if you want the target to act like it's stuck to the cursor/touch when factoring in any transform changes that were made (this is only relevent when called DURING a drag). For example, if you start dragging an element and then while you're dragging, some other code causes the parent element to rotate or move or scale, perhaps you'd want the target element to adjust its position so that it remains stuck to the cursor/touch. That's possible now. yourDraggable.update(false, true);

- IMPROVED: compatibility with Node and build systems like Webpack and Browserify. You can import individual pieces of TweenMax, for example, in ES6 import statements, like:
import {TweenMax, TimelineMax, Back, Quad} from 'gsap';
//or
var TweenMax = require("./libs/gsap/TweenMax.js");

- IMPROVED: if you set/tween a transform-related property of an element that has its css "display" property set to "none" (or it has no parentNode) but also has a transform applied via CSS, GSAP now works around a browser issue that could cause those to be lost. Some browsers report the computed style of an element with display:none as "none" even if, for example, a CSS transform of "rotate(30deg) scale(0.5, 0.5)" was applied.

- FIXED: using a unit other than "px" when tweening "border" (like border:"10rem solid red") works properly now.

- FIXED: the onStart callback of a zero-duration TimelineLite or TimelineMax fires now.

- FIXED: SplitText ignores extra white space now so that you won't get any extra "lines" where there are carriage returns or line breaks.

- FIXED: removed "TweenLite" dependency in SpliText.

- FIXED: if the last control point in a bezier path is directly on top of the final anchor point (rare), autoRotate could snap to -90 degrees (fixed now).

- FIXED: a non-zero initial rotation of a DOM element that was being animated with a BezierPlugin tween (with autoRotate enabled) didn't get returned properly when the tween was rewound fully.

- FIXED: if you TweenLite.ticker.addEventListener() *before* the first tick, it no longer immediately calls the listener (it waits for the next tick).

1.18.4

Toggle 1.18.4's commit message
1.18.4

- IMPROVED: Draggable's autoScroll feature now handles transformed child elements better (so if you scaled the element that's inside the scrollable area, it could drift as you drag).

- IMPROVED: complex gradients are better handled (although CSSPlugin doesn't claim to fully support cross-browser gradient tweens)

- IMPROVED: supports 2-part borderBottomLeftRadius, borderBottomRightRadius, borderTopLeftRadius, and borderTopRightRadius values

- IMPROVED: now when you update() a Draggable that has autoScroll turned on, it'll force an update of the scroll listeners up the DOM tree (in case, for example, the Draggable was created on an element that has since been reparented)

- FIXED: when animating the width or height of an SVG element, Chrome would log a warning about support for offsetWidth and offsetHeight being deprecated on SVG elements.

- FIXED: regression in 1.18.3 caused clip values like rect(10px,20px,100px,200px) not to get applied properly.

- FIXED: regression in 1.18.3 that caused certain properties like "perspective" not to be applied correctly when a suffix wasn't included.

- FIXED: regression in 1.18.3 that could cause an <svg> element to have its transforms parsed/applied incorrectly in rare situations (treated as if it's SVG artwork rather than a regular DOM element)

- FIXED: regression in 1.18.3 that caused matrix values that were extremely small and reported by the browser in scientific format not to be parsed correctly.

- FIXED: worked around a bug in some browsers that alter an element's offsetTop/offsetLeft/offsetParent when a transform is applied which affected bounds parsing in Draggable.

1.18.3

Toggle 1.18.3's commit message
1.18.3

- IMPROVED: stronger workarounds for Firefox bugs that cause SVG elements that aren't rendered (like <symbol> or <def>) to throw exceptions when transformed. Certain scenarios with transforming SVGs in other browsers also work better now.

- IMPROVED: parsing of decimals that don't have a leading zero (like .5 instead of 0.5) that are nested in complex strings (like "matrix(1,0,0,1,.5,.999)")

- IMPROVED: parsing of mis-matched color formats in complex strings (like "radial-gradient(circle, #FFFFFF, #FF0000)" to "radial-gradient(circle, purple, rgb(0,0,255)")

- IMPROVED: ability to animate complex values like filters in certain cases.

- NEW: can animate multiple backgroundPosition values as long as they match beginning/ending quantities and the units match.

- FIXED: TweenMax.progress() and TweenMax.totalProgress() now accept a "suppressEvents" (2nd) parameter.

- FIXED: tweening "skewY" (with CSSPlugin) could cause subsequent tweens of "rotation" or "skewX" to look inaccurate (skewX, skewY, and rotation are all related in the matrix values).

- FIXED: regression that could cause a Draggable with autoScroll:true not to update the scroll position correctly if update() is called on a Draggable that is NOT being dragged.

- FIXED: if autoRotate was set to true in a BezierPlugin tween it could occasionally (very rarely) render the CSS value incorrectly on a mobile device.

- FIXED: Chrome deprecated offsetWidth/offsetHeight/offsetParent on SVG elements, so we worked around that.

- FIXED: in some cases an onUpdate wouldn't fire on zero-duration tweens that were encountered when running backwards on a parent timeline.

- FIXED: in rare cases a className wouldn't be applied properly if it partially matched another that already was applied.

- FIXED: if a negative delay is used on a tween with immediateRender:true, it now renders at its zero time properly.

- FIXED: if a transform-related value was tweened on an element that originally had a matrix3d() applied with a skew, the skew wasn't parsed out properly (very rare).

- FIXED: if the literal "transform" property of an SVG element was animated and at the same time its transformOrigin or svgOrigin was set, it could jump.

- FIXED: if there was a bezier tween that had no change (like values:[{x:0, y:0}, {x:0, y:0}]), it could result in subsequent x/y tweens on that element not to work. Again, extremely rare.

- FIXED: in a repeating TweenMax or TimelineMax, if you went beyond the first iteration/cycle and then back to that iteration's starting time, it would render at the end instead of the start (technically that's both the start and end time), but now it correctly discerns direction and will choose the start or end, whichever makes more sense in that context.

1.18.2

Toggle 1.18.2's commit message
1.18.2

- 1.18.2 is mostly a push that was necessary due to NodeJS semver/registry complications with the 1.18.1 push. Therefore, we'll include the information about 1.18.1 fixes below as well for convenience.

- FIXED: an onDragStart() could be inadvertently triggered on a Draggable if an update(true) was called from within a callback (regression in 1.14.2)

- FIXED: the bounds may not be updated properly on a Draggable with autoScroll:true and throwProps:true after scrolling and changing the bounds and calling update(true).

- FIXED: in very rare cases, ThrowPropsPlugin's final/onComplete values might be off by an extremely small amount (like 0.0000000001).

- IMPROVED: EasePack's node/amd/commmonjs compatibility

- UPDATED: copyright dates (2016)

--------- 1.18.1 release notes below -----------

- NEW: TweenLite.ticker.wake() optionally accepts a "seamless" parameter (boolean) that will adjust the time so that things appear to seamlessly begin again (no jump according to the elapsed time). So TweenLite.ticker.wake(true) would seamlessly wake/resume the ticker.

- IMPROVED: if GSAP is loaded on a page that's in an inactive tab and the browser is under heavy load, it will not revert to using setTimeout instead of requestAnimateionFrame. Also, if you specifically set TweenLite.ticker.useRAF(true), it will not fall back to setTimeout. You may now set it to "auto" (the default) to have it intelligently select the best option.

- IMPROVED: calling update() on a Draggable instance will cause it to re-analyze the dimensions/limits for auto-scrolling. You can even do this WHILE you're dragging.

- FIXED: if the original property was a string and tweened as a number, it was simply appended to the end in 1.18.0 (regression). For example, if element.style.opacity starts at 0 and then you do TweenLite.to(element.style, 1, {opacity:1}), it would end up at "10". This is fixed now (the initial value is cast as a number). greensock#123

- FIXED: In extremely rare cases, an animation's onComplete wouldn't be called when setting the time of the parent timeline to exactly on top of the end time that happens to be on a value that ends in a decimal like 999999999999 or .00000000000001. Now if you get within 0.0000001 seconds of the end time, it will assume it is complete.

- FIXED: clearProps works on SVG transforms now.

- FIXED: Draggable's hitTest() works better in IE8 when selector text is used.

- FIXED: a "delay" set inside of a TweenMax.staggerTo()/staggerFrom()/staggerFromTo() "cycle" is now honored.

- FIXED: parsing a 3D CSS transform no longer gets flipped in one direction in certain rare scenarios.

- FIXED: setting totalDuration() of a TimelineMax with a repeatDelay larger than the new duration works now.

- FIXED: if you altered the playhead position from inside a callback (like an onComplete) that's in a nested tween inside a TimelineLite/Max, it could be inadvertently called in some (rare) cases. That's fixed now.

- FIXED: a regression in ColorPropsPlugin that caused values not to be set correctly when "format" was "number".

- FIXED: issue in IE10/11 that could cause a brief flash of a scrollbar when the page first loads Draggable.

- FIXED: worked around Firefox issue that could cause a Draggable that's applied to a video not to allow mouse events to affect the video properly. For example, clicking on it to play the video wouldn't cause the video to play, as if Draggable was intercepting the mouse events.

- FIXED: when performing a bezier tween on CSS properties like transforms, rewinding a tween/timeline all the way to a time of 0 could cause the values to revert to their pre-tween state unnecessarily.

- FIXED: when tweening to a CSS value that uses "vw" or "vh" units, it could result in using "px" at the end instead.

- FIXED: if TweenMax.updateTo() was called with a new ease defined, it wouldn't take effect in certain circumstances.

- FIXED: an onRepeat could fire twice in rare circumstances if TweenMax.updateTo() was called from within the onRepeat.

- FIXED: if you altered the bounds of a Draggable via its "vars" object AFTER it was created, and you re-used that vars object on another Draggable instance, they would both be affected. (Not anymore).

- FIXED: setting a complex CSS value like borderBottom:"10px solid red" would use the original non-numeric/non-color piece of the value (in this example, "solid" which may be "none" in the computed style).

- FIXED: in ScrollToPlugin, scrolling to values less than 0 doesn't cause the tween to trigger an autoKill anymore.

- FIXED: DrawSVGPlugin works even if you've got an extra space inside each value pair, like points="0, 0 100, 200" instead of points="0,0 100,200".

- FIXED: regression that caused CSSPlugin to render scaleZ as 1 if there was no rotationX or rotationY.

- FIXED: an ID inside of a complex string is much less likely to be inadvertently interpreted as a hex color value.

- NEW: MorphSVGPlugin records the original path data so that you can tween back to it easily (after morphing to some other value) by targeting the original element itself, like TweenLite.to("#element", 1, {morphSVG:"#element"})

- NEW: MorphSVGPlugin.pathDataToBezier() accepts a new "align" config property that can be set to an element (or selector text) to adjust the values so that the element gets positioned on the path, or "relative" to make all of the values relative (like moving the path to the element).

- NEW: You can set the shapeIndex of a "morphSVG" tween to "log" to have it console.log() the value that's automatically selected. This can be useful in troubleshooting or for optimizing speed because if you set a specific shapeIndex value (rather than "auto"), the plugin can skip several steps of logic that determines the best match.

- NEW: MorphSVGPlugin recognizes a new "precompile" property. When set to "log", it will console.log() a 2-element array of values that you can then copy/paste into the actual tween, replacing precompile:true with precompile:["...","..."] (the values that were logged). Doing so will allow MorphSVGPlugin to instantiate the tween much faster because it can skip all the logic that determines shapeIndex and matches the number of points and shifts them around when necessary to make everything look seamless. That logic only runs on the first render of the tween, so this precompile step just helps the tween START faster, avoiding a potential stutter right when it begins.

1.18.1

Toggle 1.18.1's commit message
1.18.1

- NEW: TweenLite.ticker.wake() optionally accepts a "seamless" parameter (boolean) that will adjust the time so that things appear to seamlessly begin again (no jump according to the elapsed time). So TweenLite.ticker.wake(true) would seamlessly wake/resume the ticker.

- IMPROVED: if GSAP is loaded on a page that's in an inactive tab and the browser is under heavy load, it will not revert to using setTimeout instead of requestAnimateionFrame. Also, if you specifically set TweenLite.ticker.useRAF(true), it will not fall back to setTimeout. You may now set it to "auto" (the default) to have it intelligently select the best option.

- IMPROVED: calling update() on a Draggable instance will cause it to re-analyze the dimensions/limits for auto-scrolling. You can even do this WHILE you're dragging.

- FIXED: if the original property was a string and tweened as a number, it was simply appended to the end in 1.18.0 (regression). For example, if element.style.opacity starts at 0 and then you do TweenLite.to(element.style, 1, {opacity:1}), it would end up at "10". This is fixed now (the initial value is cast as a number). greensock#123

- FIXED: In extremely rare cases, an animation's onComplete wouldn't be called when setting the time of the parent timeline to exactly on top of the end time that happens to be on a value that ends in a decimal like 999999999999 or .00000000000001. Now if you get within 0.0000001 seconds of the end time, it will assume it is complete.

- FIXED: clearProps works on SVG transforms now.

- FIXED: Draggable's hitTest() works better in IE8 when selector text is used.

- FIXED: a "delay" set inside of a TweenMax.staggerTo()/staggerFrom()/staggerFromTo() "cycle" is now honored.

- FIXED: parsing a 3D CSS transform no longer gets flipped in one direction in certain rare scenarios.

- FIXED: setting totalDuration() of a TimelineMax with a repeatDelay larger than the new duration works now.

- FIXED: if you altered the playhead position from inside a callback (like an onComplete) that's in a nested tween inside a TimelineLite/Max, it could be inadvertently called in some (rare) cases. That's fixed now.

- FIXED: a regression in ColorPropsPlugin that caused values not to be set correctly when "format" was "number".

- FIXED: issue in IE10/11 that could cause a brief flash of a scrollbar when the page first loads Draggable.

- FIXED: worked around Firefox issue that could cause a Draggable that's applied to a video not to allow mouse events to affect the video properly. For example, clicking on it to play the video wouldn't cause the video to play, as if Draggable was intercepting the mouse events.

- FIXED: when performing a bezier tween on CSS properties like transforms, rewinding a tween/timeline all the way to a time of 0 could cause the values to revert to their pre-tween state unnecessarily.

- FIXED: when tweening to a CSS value that uses "vw" or "vh" units, it could result in using "px" at the end instead.

- FIXED: if TweenMax.updateTo() was called with a new ease defined, it wouldn't take effect in certain circumstances.

- FIXED: an onRepeat could fire twice in rare circumstances if TweenMax.updateTo() was called from within the onRepeat.

- FIXED: if you altered the bounds of a Draggable via its "vars" object AFTER it was created, and you re-used that vars object on another Draggable instance, they would both be affected. (Not anymore).

- FIXED: setting a complex CSS value like borderBottom:"10px solid red" would use the original non-numeric/non-color piece of the value (in this example, "solid" which may be "none" in the computed style).

- FIXED: in ScrollToPlugin, scrolling to values less than 0 doesn't cause the tween to trigger an autoKill anymore.

- FIXED: DrawSVGPlugin works even if you've got an extra space inside each value pair, like points="0, 0 100, 200" instead of points="0,0 100,200".

- FIXED: regression that caused CSSPlugin to render scaleZ as 1 if there was no rotationX or rotationY.

- FIXED: an ID inside of a complex string is much less likely to be inadvertently interpreted as a hex color value.

- NEW: MorphSVGPlugin records the original path data so that you can tween back to it easily (after morphing to some other value) by targeting the original element itself, like TweenLite.to("#element", 1, {morphSVG:"#element"})

- NEW: MorphSVGPlugin.pathDataToBezier() accepts a new "align" config property that can be set to an element (or selector text) to adjust the values so that the element gets positioned on the path, or "relative" to make all of the values relative (like moving the path to the element).

- NEW: You can set the shapeIndex of a "morphSVG" tween to "log" to have it console.log() the value that's automatically selected. This can be useful in troubleshooting or for optimizing speed because if you set a specific shapeIndex value (rather than "auto"), the plugin can skip several steps of logic that determines the best match.

- NEW: MorphSVGPlugin recognizes a new "precompile" property. When set to true, it will console.log() a 2-element array of values that you can then copy/paste into the actual tween, replacing precompile:true with precompile:["...","..."] (the values that were logged). Doing so will allow MorphSVGPlugin to instantiate the tween much faster because it can skip all the logic that determines shapeIndex and matches the number of points and shifts them around when necessary to make everything look seamless. That logic only runs on the first render of the tween, so this precompile step just helps the tween START faster, avoiding a potential stutter right when it begins.