(vars)
| 150 | } |
| 151 | |
| 152 | init(vars) { |
| 153 | _coreInitted || _initCore(gsap) || console.warn("Please gsap.registerPlugin(Observer)"); |
| 154 | ScrollTrigger || _setScrollTrigger(); |
| 155 | let {tolerance, dragMinimum, type, target, lineHeight, debounce, preventDefault, onStop, onStopDelay, ignore, wheelSpeed, event, onDragStart, onDragEnd, onDrag, onPress, onRelease, onRight, onLeft, onUp, onDown, onChangeX, onChangeY, onChange, onToggleX, onToggleY, onHover, onHoverEnd, onMove, ignoreCheck, isNormalizer, onGestureStart, onGestureEnd, onWheel, onEnable, onDisable, onClick, scrollSpeed, capture, allowClicks, lockAxis, onLockAxis} = vars; |
| 156 | this.target = target = _getTarget(target) || _docEl; |
| 157 | this.vars = vars; |
| 158 | ignore && (ignore = gsap.utils.toArray(ignore)); |
| 159 | tolerance = tolerance || 1e-9; |
| 160 | dragMinimum = dragMinimum || 0; |
| 161 | wheelSpeed = wheelSpeed || 1; |
| 162 | scrollSpeed = scrollSpeed || 1; |
| 163 | type = type || "wheel,touch,pointer"; |
| 164 | debounce = debounce !== false; |
| 165 | lineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report "normal", so default to 22. |
| 166 | let id, onStopDelayedCall, dragged, moved, wheeled, locked, axis, |
| 167 | self = this, |
| 168 | prevDeltaX = 0, |
| 169 | prevDeltaY = 0, |
| 170 | passive = vars.passive || (!preventDefault && vars.passive !== false), |
| 171 | scrollFuncX = _getScrollFunc(target, _horizontal), |
| 172 | scrollFuncY = _getScrollFunc(target, _vertical), |
| 173 | scrollX = scrollFuncX(), |
| 174 | scrollY = scrollFuncY(), |
| 175 | limitToTouch = ~type.indexOf("touch") && !~type.indexOf("pointer") && _eventTypes[0] === "pointerdown", // for devices that accommodate mouse events and touch events, we need to distinguish. |
| 176 | isViewport = _isViewport(target), |
| 177 | ownerDoc = target.ownerDocument || _doc, |
| 178 | deltaX = [0, 0, 0], // wheel, scroll, pointer/touch |
| 179 | deltaY = [0, 0, 0], |
| 180 | onClickTime = 0, |
| 181 | clickCapture = () => onClickTime = _getTime(), |
| 182 | _ignoreCheck = (e, isPointerOrTouch) => (self.event = e) && (ignore && _isWithin(e.target, ignore)) || (isPointerOrTouch && limitToTouch && e.pointerType !== "touch") || (ignoreCheck && ignoreCheck(e, isPointerOrTouch)), |
| 183 | onStopFunc = () => { |
| 184 | self._vx.reset(); |
| 185 | self._vy.reset(); |
| 186 | onStopDelayedCall.pause(); |
| 187 | onStop && onStop(self); |
| 188 | }, |
| 189 | update = () => { |
| 190 | let dx = self.deltaX = _getAbsoluteMax(deltaX), |
| 191 | dy = self.deltaY = _getAbsoluteMax(deltaY), |
| 192 | changedX = Math.abs(dx) >= tolerance, |
| 193 | changedY = Math.abs(dy) >= tolerance; |
| 194 | onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out. |
| 195 | if (changedX) { |
| 196 | onRight && self.deltaX > 0 && onRight(self); |
| 197 | onLeft && self.deltaX < 0 && onLeft(self); |
| 198 | onChangeX && onChangeX(self); |
| 199 | onToggleX && ((self.deltaX < 0) !== (prevDeltaX < 0)) && onToggleX(self); |
| 200 | prevDeltaX = self.deltaX; |
| 201 | deltaX[0] = deltaX[1] = deltaX[2] = 0 |
| 202 | } |
| 203 | if (changedY) { |
| 204 | onDown && self.deltaY > 0 && onDown(self); |
| 205 | onUp && self.deltaY < 0 && onUp(self); |
| 206 | onChangeY && onChangeY(self); |
| 207 | onToggleY && ((self.deltaY < 0) !== (prevDeltaY < 0)) && onToggleY(self); |
| 208 | prevDeltaY = self.deltaY; |
| 209 | deltaY[0] = deltaY[1] = deltaY[2] = 0 |
no test coverage detected