UNPKG

6.72 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3 typeof define === 'function' && define.amd ? define(['exports'], factory) :
4 (global = global || self, factory(global.window = global.window || {}));
5}(this, (function (exports) { 'use strict';
6
7 /*!
8 * ScrollToPlugin 3.5.1
9 * https://greensock.com
10 *
11 * @license Copyright 2008-2020, GreenSock. All rights reserved.
12 * Subject to the terms at https://greensock.com/standard-license or for
13 * Club GreenSock members, the agreement issued with that membership.
14 * @author: Jack Doyle, jack@greensock.com
15 */
16 var gsap,
17 _coreInitted,
18 _window,
19 _docEl,
20 _body,
21 _toArray,
22 _config,
23 _windowExists = function _windowExists() {
24 return typeof window !== "undefined";
25 },
26 _getGSAP = function _getGSAP() {
27 return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;
28 },
29 _isString = function _isString(value) {
30 return typeof value === "string";
31 },
32 _max = function _max(element, axis) {
33 var dim = axis === "x" ? "Width" : "Height",
34 scroll = "scroll" + dim,
35 client = "client" + dim;
36 return element === _window || element === _docEl || element === _body ? Math.max(_docEl[scroll], _body[scroll]) - (_window["inner" + dim] || _docEl[client] || _body[client]) : element[scroll] - element["offset" + dim];
37 },
38 _buildGetter = function _buildGetter(e, axis) {
39 var p = "scroll" + (axis === "x" ? "Left" : "Top");
40
41 if (e === _window) {
42 if (e.pageXOffset != null) {
43 p = "page" + axis.toUpperCase() + "Offset";
44 } else {
45 e = _docEl[p] != null ? _docEl : _body;
46 }
47 }
48
49 return function () {
50 return e[p];
51 };
52 },
53 _getOffset = function _getOffset(element, container) {
54 var rect = _toArray(element)[0].getBoundingClientRect(),
55 isRoot = !container || container === _window || container === _body,
56 cRect = isRoot ? {
57 top: _docEl.clientTop - (_window.pageYOffset || _docEl.scrollTop || _body.scrollTop || 0),
58 left: _docEl.clientLeft - (_window.pageXOffset || _docEl.scrollLeft || _body.scrollLeft || 0)
59 } : container.getBoundingClientRect(),
60 offsets = {
61 x: rect.left - cRect.left,
62 y: rect.top - cRect.top
63 };
64
65 if (!isRoot && container) {
66 offsets.x += _buildGetter(container, "x")();
67 offsets.y += _buildGetter(container, "y")();
68 }
69
70 return offsets;
71 },
72 _parseVal = function _parseVal(value, target, axis, currentVal, offset) {
73 return !isNaN(value) && typeof value !== "object" ? parseFloat(value) - offset : _isString(value) && value.charAt(1) === "=" ? parseFloat(value.substr(2)) * (value.charAt(0) === "-" ? -1 : 1) + currentVal - offset : value === "max" ? _max(target, axis) - offset : Math.min(_max(target, axis), _getOffset(value, target)[axis] - offset);
74 },
75 _initCore = function _initCore() {
76 gsap = _getGSAP();
77
78 if (_windowExists() && gsap && document.body) {
79 _window = window;
80 _body = document.body;
81 _docEl = document.documentElement;
82 _toArray = gsap.utils.toArray;
83 gsap.config({
84 autoKillThreshold: 7
85 });
86 _config = gsap.config();
87 _coreInitted = 1;
88 }
89 };
90
91 var ScrollToPlugin = {
92 version: "3.5.1",
93 name: "scrollTo",
94 rawVars: 1,
95 register: function register(core) {
96 gsap = core;
97
98 _initCore();
99 },
100 init: function init(target, value, tween, index, targets) {
101 if (!_coreInitted) {
102 _initCore();
103 }
104
105 var data = this;
106 data.isWin = target === _window;
107 data.target = target;
108 data.tween = tween;
109
110 if (typeof value !== "object") {
111 value = {
112 y: value
113 };
114
115 if (_isString(value.y) && value.y !== "max" && value.y.charAt(1) !== "=") {
116 value.x = value.y;
117 }
118 } else if (value.nodeType) {
119 value = {
120 y: value,
121 x: value
122 };
123 }
124
125 data.vars = value;
126 data.autoKill = !!value.autoKill;
127 data.getX = _buildGetter(target, "x");
128 data.getY = _buildGetter(target, "y");
129 data.x = data.xPrev = data.getX();
130 data.y = data.yPrev = data.getY();
131
132 if (value.x != null) {
133 data.add(data, "x", data.x, _parseVal(value.x, target, "x", data.x, value.offsetX || 0), index, targets, Math.round);
134
135 data._props.push("scrollTo_x");
136 } else {
137 data.skipX = 1;
138 }
139
140 if (value.y != null) {
141 data.add(data, "y", data.y, _parseVal(value.y, target, "y", data.y, value.offsetY || 0), index, targets, Math.round);
142
143 data._props.push("scrollTo_y");
144 } else {
145 data.skipY = 1;
146 }
147 },
148 render: function render(ratio, data) {
149 var pt = data._pt,
150 target = data.target,
151 tween = data.tween,
152 autoKill = data.autoKill,
153 xPrev = data.xPrev,
154 yPrev = data.yPrev,
155 isWin = data.isWin,
156 x,
157 y,
158 yDif,
159 xDif,
160 threshold;
161
162 while (pt) {
163 pt.r(ratio, pt.d);
164 pt = pt._next;
165 }
166
167 x = isWin || !data.skipX ? data.getX() : xPrev;
168 y = isWin || !data.skipY ? data.getY() : yPrev;
169 yDif = y - yPrev;
170 xDif = x - xPrev;
171 threshold = _config.autoKillThreshold;
172
173 if (data.x < 0) {
174 data.x = 0;
175 }
176
177 if (data.y < 0) {
178 data.y = 0;
179 }
180
181 if (autoKill) {
182 if (!data.skipX && (xDif > threshold || xDif < -threshold) && x < _max(target, "x")) {
183 data.skipX = 1;
184 }
185
186 if (!data.skipY && (yDif > threshold || yDif < -threshold) && y < _max(target, "y")) {
187 data.skipY = 1;
188 }
189
190 if (data.skipX && data.skipY) {
191 tween.kill();
192
193 if (data.vars.onAutoKill) {
194 data.vars.onAutoKill.apply(tween, data.vars.onAutoKillParams || []);
195 }
196 }
197 }
198
199 if (isWin) {
200 _window.scrollTo(!data.skipX ? data.x : x, !data.skipY ? data.y : y);
201 } else {
202 if (!data.skipY) {
203 target.scrollTop = data.y;
204 }
205
206 if (!data.skipX) {
207 target.scrollLeft = data.x;
208 }
209 }
210
211 data.xPrev = data.x;
212 data.yPrev = data.y;
213 },
214 kill: function kill(property) {
215 var both = property === "scrollTo";
216
217 if (both || property === "scrollTo_x") {
218 this.skipX = 1;
219 }
220
221 if (both || property === "scrollTo_y") {
222 this.skipY = 1;
223 }
224 }
225 };
226 ScrollToPlugin.max = _max;
227 ScrollToPlugin.getOffset = _getOffset;
228 ScrollToPlugin.buildGetter = _buildGetter;
229 _getGSAP() && gsap.registerPlugin(ScrollToPlugin);
230
231 exports.ScrollToPlugin = ScrollToPlugin;
232 exports.default = ScrollToPlugin;
233
234 Object.defineProperty(exports, '__esModule', { value: true });
235
236})));