1/** 2 * Diese Funktion ermittelt die absoluten Koordinaten des übergebenen Objekts "element". 3 * 4 * @param element Ein Element, welches Knoten des DOM-Baums 5 * (Wichtig, denn sonst läuft getBoundingClientRect auf Fehler!) ist. 6 * 7 * @returns null, wenn etwas bei der Positionsberechnung schiefgelaufen ist, ansonsten 8 * ein JS-Element position mit 9 * position.x, die x-Koordinate des Elements. 10 * position.y, die y-Koordinate des Elements. 11 */ 12function getPosition(element) 13{ 14 try 15 { 16 var elem=element,tagname="",x=0,y=0; 17 18 if (!element) 19 { 20 var position = new Object(); // Objekt mit x und y zurueckgeben 21 position.x = getScrollPosition().x; 22 position.y = getScrollPosition().y; 23 24 return position; 25 } 26 27 // Der einfache Weg: 28 if(element.getBoundingClientRect) 29 { 30 var position = new Object(); // Objekt mit x und y zurueckgeben 31 32 position.x = element.getBoundingClientRect().left + getScrollPosition().x; 33 position.y = element.getBoundingClientRect().top + getScrollPosition().y; 34 35 return position; 36 } 37 38 // 39 // Der raue Weg: Zu Fuß ausrechnen 40 // 41 while ( elem != null && (typeof(elem) == "object") && (typeof(elem.tagName) != "undefined")) // solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt 42 { 43 y += elem.offsetTop; // Offset des jeweiligen Elements addieren 44 x += elem.offsetLeft; 45 46 tagname = elem.tagName.toUpperCase(); // tag-Name ermitteln, Grossbuchstaben 47 48 // IE-Hack??? 49 if ((navigator.userAgent.indexOf('MSIE 6.0') > -1) || (navigator.userAgent.indexOf('MSIE 7.0') > -1)) 50 { 51 if (elem.id == "col3") 52 { 53 x -= elem.offsetLeft; 54 } 55 } 56 if (tagname == "BODY") // wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen 57 { 58 elem = 0; 59 } 60 if (typeof(elem) == "object") // wenn elem ein Objekt ist und 61 { 62 if (typeof(elem.offsetParent) == "object") // offsetParent enthaelt 63 { 64 elem = elem.offsetParent; // Offset-Elternelement ermitteln 65 } 66 } 67 } 68 69 position=new Object(); // Objekt mit x und y zurueckgeben 70 position.x=x; 71 position.y=y; 72 73 return position; 74 } 75 catch(error) 76 { 77 return null; 78 } 79} 80 81 82/** 83 * Gibt die Mauskoordinaten als eigenständiges Positionierungsobjekt zurück. 84 * Bsp.: getMouseCoords(event, {parent: iboxElem}); 85 * 86 * @param event Das Event. 87 * @param config Ein (erweiterbares) Konfigurationsobjekt. 88 * {parent : null} Mauskoordinaten werden relativ zum gesamten Dokument angegeben (default), 89 * Sonst: Mauskoordinaten werden relativ zum übergebenen Element ermittelt. 90 * 91 * @return position Ein JS-Objekt mit Membern x und y, welches die Position der Maus enthält. 92 * Mit position.x greift man auf ermittelte x-Koordinate und mit position.y 93 * auf die ermittelte y-Koordinate der Maus zu. 94 */ 95function getMouseCoords(event, config) 96{ 97 var position = new Object(); 98 99 // event überprüfen und IE-kompatibel machen 100 event = event || window.event; 101 102 // hier sind die Maus-Koordinaten in normalen Browser. Diese sind relativ zum Dokument. 103 if(event.pageX || event.pageY) 104 { 105 position.x = event.pageX; 106 position.y = event.pageY; 107 } 108 else // hier sind die Maus-Koordinaten im Internet Explorer. Der speichert die Koordinaten relativ zum Fenster, nicht zum Dokument 109 { 110 position.x = event.clientX + getScrollPosition().x - document.body.clientLeft; 111 position.y = event.clientY + getScrollPosition().y - document.body.clientTop; 112 }; 113 114 if (config) 115 { 116 if (config.parent) 117 { 118 // Bestimme die Mausposition relativ zum übergebenen Objekt. 119 var positionParent = getPosition(config.parent); 120 position.x -= positionParent.x; 121 position.y -= positionParent.y; 122 } 123 } 124 return position; 125} 126 127/** 128 * Funktion ermittelt aus dem übergebenen event-Objekt die X- und Y-Korrdinate 129 * eines Touch-Events. Als Fallback werden die entsprechenden Maus-Korrdinaten 130 * geliefert, wenn es sich bei event beispielsweise nicht um ein Touch-Evwent handelt. 131 * 132 * @param event Das Event-Objekt aus dem die Korrdinaten ermittelt werden. 133 * @returns Objekt mit den Membern x und y, die die jeweilige x bzw. y Korrdinate 134 * aus dem Touch-Event enthalten. 135 */ 136function HRGetTouchCoords(event) 137{ 138 var position = new Object(); 139 140 if (event && event.touches && event.touches.length && event.touches.length > 0) 141 { 142 position.x = event.touches[0].pageX; 143 position.y = event.touches[0].pageY; 144 } 145 else if (event && event.changedTouches && event.changedTouches.length && event.changedTouches.length > 0) 146 { 147 position.x = event.changedTouches[0].pageX; 148 position.y = event.changedTouches[0].pageY; 149 } 150 else 151 { 152 // 153 // Wenn keine Touches-Einträge gefunden wurden, versuchen wir es auf dem "normalen" Weg, 154 // als ob ein Maus-Event vorliegt. 155 // 156 position = getMouseCoords(event); 157 } 158 return position; 159} 160 161// 162// Gibt true zurück, wenn sich die Maus über dem mitübergebenen Element befindet 163// 164function isMouseOverElement(element,event) 165{ 166 if (!element || !event) 167 return false; 168 169 var mousePos = getMouseCoords(event); 170 var targPos = getPosition(element); 171 var targWidth = parseInt(element.offsetWidth);
172 var targHeight = parseInt(element.offsetHeight); 173 174 if( (mousePos.x >= targPos.x) && // ist rechts vom linken Rand oder darauf 175 (mousePos.x <= (targPos.x + targWidth)) && // ist links vom rechten Rand oder darauf 176 (mousePos.y >= targPos.y) && // unterhalb vom oberen Rand oder darauf 177 (mousePos.y <= (targPos.y + targHeight))) // oberhalb vom unteren Rand oder darauf 178 { 179 return true; 180 } 181 else 182 { 183 return false; 184 } 185} 186 187// 188// Diese Funktion richtet ein Element unter einem anderen Element aus. Der Offset wird zum y-Abstand hinzuaddiert. 189// 190function adjustFloatingElementToFixedElement(floatingElement, fixedElement,offset) 191{ 192 // höhe des Elements ermitteln 193 var suchfeldHoehe = 20; // angenomme Standardhöhe des Element zur Ausrichtung 194 if(window.getComputedStyle) // W3C-style 195 { 196 suchfeldHoehe = parseInt(window.getComputedStyle(fixedElement, "").getPropertyValue("height"));// wird der wert nach int geparsed 197 } 198 else if(fixedElement.currentStyle ) // IE-style 199 { 200 if (parseInt(fixedElement.currentStyle["height"])) // wenn height ein integer enthält 201 suchfeldHoehe = parseInt(fixedElement.currentStyle["height"]); // wird der wert nach int geparsed 202 } 203 var pos = getPosition(fixedElement); 204 floatingElement.style.visibility = "visible"; 205 floatingElement.style.left = pos.x + "px"; 206 floatingElement.style.top = pos.y + suchfeldHoehe + offset + "px"; 207 floatingElement.style.visibility = "hidden"; 208} 209 210// 211// Gibt die Position der Seite zurück, also um wieviele Pixel gescrolled wurde. 212// 213function getScrollPosition() 214{ 215 var scrOfX = 0, scrOfY = 0; 216 217 if( typeof( window.pageYOffset ) == 'number' ) 218 { 219 //Netscape compliant 220 scrOfY = window.pageYOffset; 221 scrOfX = window.pageXOffset; 222 } 223 else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 224 { 225 //DOM compliant 226 scrOfY = document.body.scrollTop; 227 scrOfX = document.body.scrollLeft; 228 } 229 else if( document.documentElement ) 230 { 231 //IE6 standards compliant mode 232 scrOfY = document.documentElement.scrollTop; 233 scrOfX = document.documentElement.scrollLeft; 234 } 235 236 var scrollPosition = new Object(); 237 scrollPosition.x = scrOfX; 238 scrollPosition.y = scrOfY; 239 240 return scrollPosition; 241} 242 243 244 245 246// 247// Gibt die Position der Seite zurück, also um wieviele Pixel gescrolled wurde. 248// 249function setScrollPosition(x,y) 250{ 251 window.scrollTo(x,y); 252} 253 254 255 256// 257// Gibt die Breite des Windows zurück 258// 259function getWindowWidth(win) 260{ 261 if (win == undefined) 262 win = window; 263 if (win.innerWidth) 264 { 265 return win.innerWidth; 266 } 267 else 268 { 269 if (win.document.documentElement && 270 win.document.documentElement.clientWidth) 271 { 272 return win.document.documentElement.clientWidth; 273 } 274 return win.document.body.offsetWidth; 275 } 276} 277 278 279// 280// Gibt die Höhe des Windows zurück 281// 282function getWindowHeight(win) 283{ 284 if (win == undefined) 285 win = window; 286 if (win.innerHeight) 287 { 288 return win.innerHeight; 289 } 290 else 291 { 292 if (win.document.documentElement 293 && win.document.documentElement.clientHeight) 294 { 295 return win.document.documentElement.clientHeight; 296 } 297 return win.document.body.offsetHeight; 298 } 299}
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.