PageSourceSearch

https://www.panjoclub-iz.com/_vendor/vue-scrollto.js

js panjoclub-iz.com collected 2026-10-02 22:37:44 UTC 14,916 bytes, 518 lines download raw bytes

vendor: 14,916 bytes, lines 1-518
1/*!
2  * vue-scrollto v2.17.1
3  * (c) 2019 Randjelovic Igor
4  * @license MIT
5  */
6(function (global, factory) {
7  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8  typeof define === 'function' && define.amd ? define(factory) :
9  (global = global || self, global['vue-scrollto'] = factory());
10}(this, function () { 'use strict';
11
12  function _typeof(obj) {
13    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
14      _typeof = function (obj) {
15        return typeof obj;
16      };
17    } else {
18      _typeof = function (obj) {
19        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
20      };
21    }
22
23    return _typeof(obj);
24  }
25
26  function _extends() {
27    _extends = Object.assign || function (target) {
28      for (var i = 1; i < arguments.length; i++) {
29        var source = arguments[i];
30
31        for (var key in source) {
32          if (Object.prototype.hasOwnProperty.call(source, key)) {
33            target[key] = source[key];
34          }
35        }
36      }
37
38      return target;
39    };
40
41    return _extends.apply(this, arguments);
42  }
43
44  /**
45   * https://github.com/gre/bezier-easing
46   * BezierEasing - use bezier curve for transition easing function
47   * by Gaëtan Renaudeau 2014 - 2015 – MIT License
48   */
49
50  // These values are established by empiricism with tests (tradeoff: performance VS precision)
51  var NEWTON_ITERATIONS = 4;
52  var NEWTON_MIN_SLOPE = 0.001;
53  var SUBDIVISION_PRECISION = 0.0000001;
54  var SUBDIVISION_MAX_ITERATIONS = 10;
55
56  var kSplineTableSize = 11;
57  var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
58
59  var float32ArraySupported = typeof Float32Array === 'function';
60
61  function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }
62  function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }
63  function C (aA1)      { return 3.0 * aA1; }
64
65  // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
66  function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }
67
68  // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
69  function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }
70
71  function binarySubdivide (aX, aA, aB, mX1, mX2) {
72    var currentX, currentT, i = 0;
73    do {
74      currentT = aA + (aB - aA) / 2.0;
75      currentX = calcBezier(currentT, mX1, mX2) - aX;
76      if (currentX > 0.0) {
77        aB = currentT;
78      } else {
79        aA = currentT;
80      }
81    } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
82    return currentT;
83  }
84
85  function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {
86   for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
87     var currentSlope = getSlope(aGuessT, mX1, mX2);
88     if (currentSlope === 0.0) {
89       return aGuessT;
90     }
91     var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
92     aGuessT -= currentX / currentSlope;
93   }
94   return aGuessT;
95  }
96
97  function LinearEasing (x) {
98    return x;
99  }
100
101  var src = function bezier (mX1, mY1, mX2, mY2) {
102    if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {
103      throw new Error('bezier x values must be in [0, 1] range');
104    }
105
106    if (mX1 === mY1 && mX2 === mY2) {
107      return LinearEasing;
108    }
109
110    // Precompute samples table
111    var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
112    for (var i = 0; i < kSplineTableSize; ++i) {
113      sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
114    }
115
116    function getTForX (aX) {
117      var intervalStart = 0.0;
118      var currentSample = 1;
119      var lastSample = kSplineTableSize - 1;
120
121      for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
122        intervalStart += kSampleStepSize;
123      }
124      --currentSample;
125
126      // Interpolate to provide an initial guess for t
127      var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
128      var guessForT = intervalStart + dist * kSampleStepSize;
129
130      var initialSlope = getSlope(guessForT, mX1, mX2);
131      if (initialSlope >= NEWTON_MIN_SLOPE) {
132        return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
133      } else if (initialSlope === 0.0) {
134        return guessForT;
135      } else {
136        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
137      }
138    }
139
140    return function BezierEasing (x) {
141      // Because JavaScript number are imprecise, we should guarantee the extremes are right.
142      if (x === 0) {
143        return 0;
144      }
145      if (x === 1) {
146        return 1;
147      }
148      return calcBezier(getTForX(x), mY1, mY2);
149    };
150  };
151
152  var easings = {
153    ease: [0.25, 0.1, 0.25, 1.0],
154    linear: [0.0, 0.0, 1.0, 1.0],
155    'ease-in': [0.42, 0.0, 1.0, 1.0],
156    'ease-out': [0.0, 0.0, 0.58, 1.0],
157    'ease-in-out': [0.42, 0.0, 0.58, 1.0]
158  };
159
160  // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection
161  var supportsPassive = false;
162
163  try {
164    var opts = Object.defineProperty({}, 'passive', {
165      get: function get() {
166        supportsPassive = true;
167      }
168    });
169    window.addEventListener('test', null, opts);
170  } catch (e) {}
171
172  var _ = {
173    $: function $(selector) {
174      if (typeof selector !== 'string') {
175        return selector;
176      }
177
178      return document.querySelector(selector);
179    },
180    on: function on(element, events, handler) {
181      var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
182        passive: false
183      };
184
185      if (!(events instanceof Array)) {
186        events = [events];
187      }
188
189      for (var i = 0; i < events.length; i++) {
190        element.addEventListener(events[i], handler, supportsPassive ? opts : false);
191      }
192    },
193    off: function off(element, events, handler) {
194      if (!(events instanceof Array)) {
195        events = [events];
196      }
197
198      for (var i = 0; i < events.length; i++) {
199        element.removeEventListener(events[i], handler);
200      }
201    },
202    cumulativeOffset: function cumulativeOffset(element) {
203      var top = 0;
204      var left = 0;
205
206      do {
207        top += element.offsetTop || 0;
208        left += element.offsetLeft || 0;
209        element = element.offsetParent;
210      } while (element);
211
212      return {
213        top: top,
214        left: left
215      };
216    }
217  };
218
219  var abortEvents = ['mousedown', 'wheel', 'DOMMouseScroll', 'mousewheel', 'keyup', 'touchmove'];
220  var defaults = {
221    container: 'body',
222    duration: 500,
223    easing: 'ease',
224    offset: 0,
225    force: true,
226    cancelable: true,
227    onStart: false,
228    onDone: false,
229    onCancel: false,
230    x: false,
231    y: true
232  };
233  function setDefaults(options) {
234    defaults = _extends({}, defaults, options);
235  }
236  var scroller = function scroller() {
237    var element; // element to scroll to
238
239    var container; // container to scroll
240
241    var duration; // duration of the scrolling
242
243    var easing; // easing to be used when scrolling
244
245    var offset; // offset to be added (subtracted)
246
247    var force; // force scroll, even if element is visible
248
249    var cancelable; // indicates if user can cancel the scroll or not.
250
251    var onStart; // callback when scrolling is started
252
253    var onDone; // callback when scrolling is done
254
255    var onCancel; // callback when scrolling is canceled / aborted
256
257    var x; // scroll on x axis
258
259    var y; // scroll on y axis
260
261    var initialX; // initial X of container
262
263    var targetX; // target X of container
264
265    var initialY; // initial Y of container
266
267    var targetY; // target Y of container
268
269    var diffX; // difference
270
271    var diffY; // difference
272
273    var abort; // is scrolling aborted
274
275    var abortEv; // event that aborted scrolling
276
277    var abortFn = function abortFn(e) {
278      if (!cancelable) return;
279      abortEv = e;
280      abort = true;
281    };
282
283    var easingFn;
284    var timeStart; // time when scrolling started
285
286    var timeElapsed; // time elapsed since scrolling started
287
288    var progress; // progress
289
290    function scrollTop(container) {
291      var scrollTop = container.scrollTop;
292
293      if (container.tagName.toLowerCase() === 'body') {
294        // in firefox body.scrollTop always returns 0
295        // thus if we are trying to get scrollTop on a body tag
296        // we need to get it from the documentElement
297        scrollTop = scrollTop || document.documentElement.scrollTop;
298      }
299
300      return scrollTop;
301    }
302
303    function scrollLeft(container) {
304      var scrollLeft = container.scrollLeft;
305
306      if (container.tagName.toLowerCase() === 'body') {
307        // in firefox body.scrollLeft always returns 0
308        // thus if we are trying to get scrollLeft on a body tag
309        // we need to get it from the documentElement
310        scrollLeft = scrollLeft || document.documentElement.scrollLeft;
311      }
312
313      return scrollLeft;
314    }
315
316    function step(timestamp) {
317      if (abort) return done();
318      if (!timeStart) timeStart = timestamp;
319      timeElapsed = timestamp - timeStart;
320      progress = Math.min(timeElapsed / duration, 1);
321      progress = easingFn(progress);
322      topLeft(container, initialY + diffY * progress, initialX + diffX * progress);
323      timeElapsed < duration ? window.requestAnimationFrame(step) : done();
324    }
325
326    function done() {
327      if (!abort) topLeft(container, targetY, targetX);
328      timeStart = false;
329
330      _.off(container, abortEvents, abortFn);
331
332      if (abort && onCancel) onCancel(abortEv, element);
333      if (!abort && onDone) onDone(element);
334    }
335
336    function topLeft(element, top, left) {
337      if (y) element.scrollTop = top;
338      if (x) element.scrollLeft = left;
339
340      if (element.tagName.toLowerCase() === 'body') {
341        // in firefox body.scrollTop doesn't scroll the page
342        // thus if we are trying to scrollTop on a body tag
343        // we need to scroll on the documentElement
344        if (y) document.documentElement.scrollTop = top;
345        if (x) document.documentElement.scrollLeft = left;
346      }
347    }
348
349    function scrollTo(target, _duration) {
350      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
351
352      if (_typeof(_duration) === 'object') {
353        options = _duration;
354      } else if (typeof _duration === 'number') {
355        options.duration = _duration;
356      }
357
358      element = _.$(target);
359
360      if (!element) {
361        return console.warn('[vue-scrollto warn]: Trying to scroll to an element that is not on the page: ' + target);
362      }
363
364      container = _.$(options.container || defaults.container);
365      duration = options.duration || defaults.duration;
366      easing = options.easing || defaults.easing;
367      offset = options.offset || defaults.offset;
368      force = options.hasOwnProperty('force') ? options.force !== false : defaults.force;
369      cancelable = options.hasOwnProperty('cancelable') ? options.cancelable !== false : defaults.cancelable;
370      onStart = options.onStart || defaults.onStart;
371      onDone = options.onDone || defaults.onDone;
372      onCancel = options.onCancel || defaults.onCancel;
373      x = options.x === undefined ? defaults.x : options.x;
374      y = options.y === undefined ? defaults.y : options.y;
375
376      var cumulativeOffsetContainer = _.cumulativeOffset(container);
377
378      var cumulativeOffsetElement = _.cumulativeOffset(element);
379
380      if (typeof offset === 'function') {
381        offset = offset(element, container);
382      }
383
384      initialY = scrollTop(container);
385      targetY = cumulativeOffsetElement.top - cumulativeOffsetContainer.top + offset;
386      initialX = scrollLeft(container);
387      targetX = cumulativeOffsetElement.left - cumulativeOffsetContainer.left + offset;
388      abort = false;
389      diffY = targetY - initialY;
390      diffX = targetX - initialX;
391
392      if (!force) {
393        // When the container is the default (body) we need to use the viewport
394        // height, not the entire body height
395        var containerHeight = container.tagName.toLowerCase() === 'body' ? document.documentElement.clientHeight || window.innerHeight : container.offsetHeight;
396        var containerTop = initialY;
397        var containerBottom = containerTop + containerHeight;
398        var elementTop = targetY - offset;
399        var elementBottom = elementTop + element.offsetHeight;
400
401        if (elementTop >= containerTop && elementBottom <= containerBottom) {
402          // make sure to call the onDone callback even if there is no need to
403          // scroll the container. Fixes #111 (ref #118)
404          if (onDone) onDone(element);
405          return;
406        }
407      }
408
409      if (onStart) onStart(element);
410
411      if (!diffY && !diffX) {
412        if (onDone) onDone(element);
413        return;
414      }
415
416      if (typeof easing === 'string') {
417        easing = easings[easing] || easings['ease'];
418      }
419
420      easingFn = src.apply(src, easing);
421
422      _.on(container, abortEvents, abortFn, {
423        passive: true
424      });
425
426      window.requestAnimationFrame(step);
427      return function () {
428        abortEv = null;
429        abort = true;
430      };
431    }
432
433    return scrollTo;
434  };
435
436  var _scroller = scroller();
437
438  var bindings = []; // store binding data
439
440  function deleteBinding(el) {
441    for (var i = 0; i < bindings.length; ++i) {
442      if (bindings[i].el === el) {
443        bindings.splice(i, 1);
444        return true;
445      }
446    }
447
448    return false;
449  }
450
451  function findBinding(el) {
452    for (var i = 0; i < bindings.length; ++i) {
453      if (bindings[i].el === el) {
454        return bindings[i];
455      }
456    }
457  }
458
459  function getBinding(el) {
460    var binding = findBinding(el);
461
462    if (binding) {
463      return binding;
464    }
465
466    bindings.push(binding = {
467      el: el,
468      binding: {}
469    });
470    return binding;
471  }
472
473  function handleClick(e) {
474    e.preventDefault();
475    var ctx = getBinding(this).binding;
476
477    if (typeof ctx.value === 'string') {
478      return _scroller(ctx.value);
479    }
480
481    _scroller(ctx.value.el || ctx.value.element, ctx.value);
482  }
483
484  var VueScrollTo = {
485    bind: function bind(el, binding) {
486      getBinding(el).binding = binding;
487
488      _.on(el, 'click', handleClick);
489    },
490    unbind: function unbind(el) {
491      deleteBinding(el);
492
493      _.off(el, 'click', handleClick);
494    },
495    update: function update(el, binding) {
496      getBinding(el).binding = binding;
497    },
498    scrollTo: _scroller,
499    bindings: bindings
500  };
501
502  var install = function install(Vue, options) {
503    if (options) setDefaults(options);
504    Vue.directive('scroll-to', VueScrollTo);
505    Vue.prototype.$scrollTo = VueScrollTo.scrollTo;
506  };
507
508  if (typeof window !== 'undefined' && window.Vue) {
509    window.VueScrollTo = VueScrollTo;
510    window.VueScrollTo.setDefaults = setDefaults;
511    window.Vue.use(install);
512  }
513
514  VueScrollTo.install = install;
515
516  return VueScrollTo;
517
518}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.