Approach
The camera settles. Far strata hold still while the horizon draws outward from the centre.
ShineSky · internal reference
Eleven GSAP behaviour specimens. Each entry states its behaviour contract in plain language, runs on a self-authored abstract fixture, and exposes explicit Init, Replay and Destroy controls so lifecycle cleanup is observable rather than assumed.
SVG-01
One timeline drives an SVG rect and a plain div through the same four origin values, so origin semantics can be compared across both rendering models.
50% 50%, right bottom, 0px 0px, 100% 0%.DOM element, same tween vars
transformOrigin: 50% 50%
SVG-02
Two identical shapes rotate by the same amount around a changed origin. The left one
uses smoothOrigin: true; the right one keeps the spec-accurate jump.
+=90.50% 50% → right bottom → 0% 100%.transformOrigin: 50% 50%
SVG-03
Parts at different positions and sizes rotate either around one shared SVG canvas point or around their own centres. The shared point is drawn as a visible marker.
svgOrigin takes canvas pixel coordinates only, never percentages.150 100.aria-pressed.Mode: shared canvas point 150 100
SVG-04
CSSPlugin drives position, scale and stroke width. AttrPlugin drives the native
cx, r and rx attributes on the same canvas.
repeat: 1, yoyo: true, repeatDelay: 0.5.CSS layer: transform + stroke · Attr layer: cx / r / rx
SVG-05
Four bars of different widths each travel 100% of their own width, so no per-node pixel maths is needed.
xPercent: 100 resolves against each target's own box.repeat: 1 and yoyo: true.xPercent: 0.xPercent: 100 · stagger 0.4 · repeat 1 · yoyo
SVG-06
The square drags freely inside the bounds rectangle. The dial is a rotation Draggable. Both use InertiaPlugin, and every instance is killed on Destroy.
x,y with bounds, and rotation.Draggable + InertiaPlugin · static (drag disabled)
SVG-07
The rider follows the curve, aligns to it and auto-rotates. It runs once per Init or Replay rather than holding a permanent loop.
motionPath with align, autoRotate and alignOrigin: [0.5, 0.5].power1.inOut, single pass.motionPath · align + autoRotate · one pass per replay
SVG-08
Outline strokes draw in with a stagger, the filled layer then fades up, and the guide strokes are hidden so no half-drawn artwork is left behind.
drawSVG from 0 to 100%, staggered by 0.12.drawSVG 0 → 100% · then fill autoAlpha
SVG-09
Stepping through the accepted value forms shows how the start and end of the visible stroke segment are expressed. The active value is printed under the fixture.
100%, 40% 60%, 20 350, 50% 50%, true, 10%.100%.drawSVG: 100%
SVG-10
One visible path morphs through a triangle, a pentagon and a curved blob, then returns to its authored base square. The plugin reconciles the differing point counts.
d attribute exactly.Active shape: base square
Study 11
A pinned ScrollTrigger timeline scrubs self-authored SVG and CSS geometry. There is no video element, poster frame, image sequence or external media: depth comes from layered strata and a drawn horizon.
scrub: 0.6 and invalidateOnRefresh.1 / 3 · approach
The camera settles. Far strata hold still while the horizon draws outward from the centre.
Near strata travel further than far ones. The parallax difference is what reads as depth.
Scrub resolves into the composed final frame, which is also the static and reduced-motion state.