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 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
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 | })));
|