PageSourceSearch

https://www.stadtwerk-am-see.de/de/static/js/HRSysLib/Hilfsfunktionen/HRScrollTo.js?nc=1790923960777

js stadtwerk-am-see.de collected 2026-10-04 00:25:42 UTC 5,160 bytes, 147 lines download raw bytes

1/***************************************************************************
2// Firma:          Hehner Reus Systems GmbH
3// Projekt:        com.cerno.basis
4// Datei:          HRVirtualKeyboard.js
5// Erstellung:     29.09.2020
6// Verwendung:     Scrollt smooth zum angegebenen Element. Sucht dazu automatisch 
7                   das nächste DIV mit Scrollbar und kurbelt daran.
8// Abhängigkeiten: CSS.js, Browser.js, Position.js, animator.js
9/****************************************************************************/
10
11/**
12 * Enumeration für die möglichen Scrollmodi.
13 */
14var HRScrollMode = {
15   /*
16    * Zum Top-Wert des Elements
17    */
18   Top: 'top',
19   
20   /*
21    * Zum Bottom-Wert des Elements
22    */
23   Bottom: 'bottom'
24}
25
26/**
27 * Scrollt "smooth" zu dem angegebenen DOM-Element.
28 * 
29 * Später:
30 * Wenn die Browserunterstützung für den scrollToOptions-Parameter für den IE und den Safari irgendwann 
31 * einmal nachgespachtelt werden sollte, können wir die untenstehende Animator-Weiche vollständig loswerden.
32 * 
33 * @param element Das Element, bis zu dem gescrollt werden soll oder dessen ID.
34 * @param config [optional] Kapselt optionale Konfigurationsparameter
35 * <ul>
36 *    <li>scrollMode: Der Scroll-Modus definiert die möglichen Scrollarten (@see HRScrollMode). Default: HRScrollMode.Top</li>
37 * </ul>
38 */
39function HRScrollTo(element, config)
40{
41   try
42   {
43      var scrollMode = HRScrollMode.Top;
44      if (config)
45      {
46         if (config.scrollMode)
47            scrollMode = config.scrollMode;
48      }
49      
50      if (element)
51      {
52         if (typeof(element) === 'string')
53            element = document.getElementById(element);
54         
55         var scrollMargin = getStyleMeasureValue(getStyleValue(element, 'scroll-margin-top'));
56         if (scrollMargin <= 0)
57         {
58            scrollMargin = getStyleMeasureValue(getStyleValue(element, 'scroll-snap-margin-top'));
59         }
60         
61         if (typeof(HRBrowser) === 'object' && !HRBrowser.isIE())
62         {
63            var topPos = getElementTopValue(element);
64            
65            if (topPos >= 0)
66            {
67               topPos = topPos - scrollMargin;
68               if (scrollMode === HRScrollMode.Bottom)
69                  topPos = topPos + getElementHeightValue(element);
70               
71               window.scrollTo({ top: parseInt(topPos), behavior: 'smooth' });
72            }
73         }
74         else
75         {
76            var parent = element.parentNode;
77            
78            while (parent && parent.style && parent.style.overflow != 'scroll')
79               parent = parent.parentNode;
80            
81            if (!parent || parent == document)
82               parent = window;
83            
84            var current = parseInt(parent.scrollTop);
85            if (parent == window)
86            {
87               if (typeof(window.pageYOffset) === 'number')
88               {
89                  current = window.pageYOffset;
90               }
91               else if (document.body && document.body.scrollTop)
92               {
93                  current = document.body.scrollTop;
94               }
95            }
96            
97            /*
98             * Problem: Animator bearbeitet nur Style-Werte, scrollTop ist aber kein Style-Wert.
99             * Daher: Zweites Objekt erzeugen, dessen Style-Wert mit Animator bearbeiten 
100             * und nach jedem Schritt manuell in Scrollbox rüberkopieren.
101             */
102            var helper = document.createElement('DIV');
103            helper.style.height = '0px';
104            helper.style.width = current;
105            helper.style.borderWidth = '0px';
106            helper.style.position = 'absolute';
107            document.body.appendChild(helper);
108            
109            var animator = new Animator({
110               onStep: function()
111               {
112                  var temp = helper.style.width;
113                  if (temp.substr(temp.length - 2, temp.length) === 'px')
114                     temp = temp.substr(0,temp.length-2);
115                  
116                  if (parent != window)
117                  {
118                     parent.scrollTop = temp;
119                  }
120                  else
121                  {
122                     window.scrollTo(0, temp);
123                  }
124               },
125               onComplete: function()
126               {
127                  document.body.removeChild(helper);
128               }
129            });
130            
131            var topPos = getPosition(element).y - scrollMargin;
132            if (parent != window)
133               topPos = topPos - getPosition(parent).y;
134            if (scrollMode === HRScrollMode.Bottom)
135               topPos = topPos + getElementHeightValue(element);
136            
137            animator.addSubject(new NumericalStyleSubject(helper, 'width', current, parseInt(topPos)));
138            animator.play();
139         }
140      }
141   }
142   catch (e)
143   {
144      if (typeof(HRLogError) === 'function')
145         HRLogError(new Error('HRScrollTo.HRScrollTo: Fehler beim Scrollen.' + e));
146   }
147}

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.