PageSourceSearch

https://ptsteam.com/store/catalog/view/javascript/smoothscroll.js

js ptsteam.com collected 2026-09-24 13:25:23 UTC 6,899 bytes, 303 lines download raw bytes

1// SmoothScroll v0.9.9
2// Licensed under the terms of the MIT license.
3// People involved
4// - Balazs Galambosi: maintainer (CHANGELOG.txt)
5// - Patrick Brunner ([email protected])
6// - Michael Herf: ssc_pulse Algorithm
7
8function ssc_init() {
9  if (!document.body) return;
10  var e = document.body;
11  var t = document.documentElement;
12  var n = window.innerHeight;
13  var r = e.scrollHeight;
14  ssc_root = document.compatMode.indexOf("CSS") >= 0 ? t : e;
15  ssc_activeElement = e;
16  ssc_initdone = true;
17  if (top != self) {
18    ssc_frame = true
19  } else if (r > n && (e.offsetHeight <= n || t.offsetHeight <= n)) {
20    ssc_root.style.height = "auto";
21    if (ssc_root.offsetHeight <= n) {
22      var i = document.createElement("div");
23      i.style.clear = "both";
24      e.appendChild(i)
25    }
26  }
27  if (!ssc_fixedback) {
28    e.style.backgroundAttachment = "scroll";
29    t.style.backgroundAttachment = "scroll"
30  }
31  if (ssc_keyboardsupport) {
32    ssc_addEvent("keydown", ssc_keydown)
33  }
34}
35
36function ssc_scrollArray(e, t, n, r) {
37  r || (r = 1e3);
38  ssc_directionCheck(t, n);
39  ssc_que.push({
40    x: t,
41    y: n,
42    lastX: t < 0 ? .99 : -.99,
43    lastY: n < 0 ? .99 : -.99,
44    start: +(new Date)
45  });
46  if (ssc_pending) {
47    return
48  }
49  var i = function() {
50    var s = +(new Date);
51    var o = 0;
52    var u = 0;
53    for (var a = 0; a < ssc_que.length; a++) {
54      var f = ssc_que[a];
55      var l = s - f.start;
56      var c = l >= ssc_animtime;
57      var h = c ? 1 : l / ssc_animtime;
58      if (ssc_pulseAlgorithm) {
59        h = ssc_pulse(h)
60      }
61      var p = f.x * h - f.lastX >> 0;
62      var d = f.y * h - f.lastY >> 0;
63      o += p;
64      u += d;
65      f.lastX += p;
66      f.lastY += d;
67      if (c) {
68        ssc_que.splice(a, 1);
69        a--
70      }
71    }
72    if (t) {
73      var v = e.scrollLeft;
74      e.scrollLeft += o;
75      if (o && e.scrollLeft === v) {
76        t = 0
77      }
78    }
79    if (n) {
80      var m = e.scrollTop;
81      e.scrollTop += u;
82      if (u && e.scrollTop === m) {
83        n = 0
84      }
85    }
86    if (!t && !n) {
87      ssc_que = []
88    }
89    if (ssc_que.length) {
90      setTimeout(i, r / ssc_framerate + 1)
91    } else {
92      ssc_pending = false
93    }
94  };
95  setTimeout(i, 0);
96  ssc_pending = true
97}
98
99function ssc_wheel(e) {
100  if (!ssc_initdone) {
101    ssc_init()
102  }
103  var t = e.target;
104  var n = ssc_overflowingAncestor(t);
105  if (!n || e.defaultPrevented || ssc_isNodeName(ssc_activeElement, "embed") || ssc_isNodeName(t, "embed") && /\.pdf/i.test(t.src)) {
106    return true
107  }
108  var r = e.wheelDeltaX || 0;
109  var i = e.wheelDeltaY || 0;
110  if (!r && !i) {
111    i = e.wheelDelta || 0
112  }
113  if (Math.abs(r) > 1.2) {
114    r *= ssc_stepsize / 120
115  }
116  if (Math.abs(i) > 1.2) {
117    i *= ssc_stepsize / 120
118  }
119  ssc_scrollArray(n, -r, -i);
120  e.preventDefault()
121}
122
123function ssc_keydown(e) {
124  var t = e.target;
125  var n = e.ctrlKey || e.altKey || e.metaKey;
126  if (/input|textarea|embed/i.test(t.nodeName) || t.isContentEditable || e.defaultPrevented || n) {
127    return true
128  }
129  if (ssc_isNodeName(t, "button") && e.keyCode === ssc_key.spacebar) {
130    return true
131  }
132  var r, i = 0,
133      s = 0;
134  var o = ssc_overflowingAncestor(ssc_activeElement);
135  var u = o.clientHeight;
136  if (o == document.body) {
137    u = window.innerHeight
138  }
139  switch (e.keyCode) {
140  case ssc_key.up:
141    s = -ssc_arrowscroll;
142    break;
143  case ssc_key.down:
144    s = ssc_arrowscroll;
145    break;
146  case ssc_key.spacebar:
147    r = e.shiftKey ? 1 : -1;
148    s = -r * u * .9;
149    break;
150  case ssc_key.pageup:
151    s = -u * .9;
152    break;
153  case ssc_key.pagedown:
154    s = u * .9;
155    break;
156  case ssc_key.home:
157    s = -o.scrollTop;
158    break;
159  case ssc_key.end:
160    var a = o.scrollHeight - o.scrollTop - u;
161    s = a > 0 ? a + 10 : 0;
162    break;
163  case ssc_key.left:
164    i = -ssc_arrowscroll;
165    break;
166  case ssc_key.right:
167    i = ssc_arrowscroll;
168    break;
169  default:
170    return true
171  }
172  ssc_scrollArray(o, i, s);
173  e.preventDefault()
174}
175
176function ssc_mousedown(e) {
177  ssc_activeElement = e.target
178}
179
180function ssc_setCache(e, t) {
181  for (var n = e.length; n--;) ssc_cache[ssc_uniqueID(e[n])] = t;
182  return t
183}
184
185function ssc_overflowingAncestor(e) {
186  var t = [];
187  var n = ssc_root.scrollHeight;
188  do {
189    var r = ssc_cache[ssc_uniqueID(e)];
190    if (r) {
191      return ssc_setCache(t, r)
192    }
193    t.push(e);
194    if (n === e.scrollHeight) {
195      if (!ssc_frame || ssc_root.clientHeight + 10 < n) {
196        return ssc_setCache(t, document.body)
197      }
198    } else if (e.clientHeight + 10 < e.scrollHeight) {
199      overflow = getComputedStyle(e, "").getPropertyValue("overflow");
200      if (overflow === "scroll" || overflow === "auto") {
201        return ssc_setCache(t, e)
202      }
203    }
204  } while (e = e.parentNode)
205}
206
207function ssc_addEvent(e, t, n) {
208  window.addEventListener(e, t, n || false)
209}
210
211function ssc_removeEvent(e, t, n) {
212  window.removeEventListener(e, t, n || false)
213}
214
215function ssc_isNodeName(e, t) {
216  return e.nodeName.toLowerCase() === t.toLowerCase()
217}
218
219function ssc_directionCheck(e, t) {
220  e = e > 0 ? 1 : -1;
221  t = t > 0 ? 1 : -1;
222  if (ssc_direction.x !== e || ssc_direction.y !== t) {
223    ssc_direction.x = e;
224    ssc_direction.y = t;
225    ssc_que = []
226  }
227}
228
229function ssc_pulse_(e) {
230  var t, n, r;
231  e = e * ssc_pulseScale;
232  if (e < 1) {
233    t = e - (1 - Math.exp(-e))
234  } else {
235    n = Math.exp(-1);
236    e -= 1;
237    r = 1 - Math.exp(-e);
238    t = n + r * (1 - n)
239  }
240  return t * ssc_pulseNormalize
241}
242
243function ssc_pulse(e) {
244  if (e >= 1) return 1;
245  if (e <= 0) return 0;
246  if (ssc_pulseNormalize == 1) {
247    ssc_pulseNormalize /= ssc_pulse_(1)
248  }
249  return ssc_pulse_(e)
250}
251
252var ssc_framerate = 150;
253var ssc_animtime = 500;
254var ssc_stepsize = 150;
255var ssc_pulseAlgorithm = true;
256var ssc_pulseScale = 6;
257var ssc_pulseNormalize = 1;
258var ssc_keyboardsupport = true;
259var ssc_arrowscroll = 50;
260var ssc_frame = false;
261var ssc_direction = {
262  x: 0,
263  y: 0
264};
265
266var ssc_initdone = false;
267var ssc_fixedback = true;
268var ssc_root = document.documentElement;
269var ssc_activeElement;
270var ssc_key = {
271  left: 37,
272  up: 38,
273  right: 39,
274  down: 40,
275  spacebar: 32,
276  pageup: 33,
277  pagedown: 34,
278  end: 35,
279  home: 36
280};
281
282var ssc_que = [];
283var ssc_pending = false;
284var ssc_cache = {};
285
286setInterval(function() {
287  ssc_cache = {}
288}, 10 * 1e3);
289
290var ssc_uniqueID = function() {
291  var e = 0;
292  return function(t) {
293    return t.ssc_uniqueID || (t.ssc_uniqueID = e++)
294  }
295}();
296
297var ischrome = /chrome/.test(navigator.userAgent.toLowerCase());
298
299if (ischrome) {
300  ssc_addEvent("mousedown", ssc_mousedown);
301  ssc_addEvent("mousewheel", ssc_wheel);
302  ssc_addEvent("load", ssc_init)
303}

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.