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 { 168 //console.log("Fehlt das Element? -> " + element + " oder das Event? ->" + event); 169 return false; 170 } 171 172 var mousePos = getMouseCoords(event); 173 var targPos = getPosition(element); 174 var targWidth = parseInt(element.offsetWidth); 175 var targHeight = parseInt(element.offsetHeight); 176 177 if( (mousePos.x >= targPos.x) && // ist rechts vom linken Rand oder darauf 178 (mousePos.x <= (targPos.x + targWidth)) && // ist links vom rechten Rand oder darauf 179 (mousePos.y >= targPos.y) && // unterhalb vom oberen Rand oder darauf 180 (mousePos.y <= (targPos.y + targHeight))) // oberhalb vom unteren Rand oder darauf 181 { 182 return true; 183 } 184 else 185 { 186 return false; 187 } 188} 189 190// 191// Diese Funktion richtet ein Element unter einem anderen Element aus. Der Offset wird zum y-Abstand hinzuaddiert. 192// 193function adjustFloatingElementToFixedElement(floatingElement, fixedElement,offset) 194{ 195 // höhe des Elements ermitteln 196 var suchfeldHoehe = 20; // angenomme Standardhöhe des Element zur Ausrichtung 197 if(window.getComputedStyle) // W3C-style 198 { 199 suchfeldHoehe = parseInt(window.getComputedStyle(fixedElement, "").getPropertyValue("height"));// wird der wert nach int geparsed 200 } 201 else if(fixedElement.currentStyle ) // IE-style 202 { 203 if (parseInt(fixedElement.currentStyle["height"])) // wenn height ein integer enthält 204 suchfeldHoehe = parseInt(fixedElement.currentStyle["height"]); // wird der wert nach int geparsed 205 } 206 var pos = getPosition(fixedElement); 207 floatingElement.style.visibility = "visible"; 208 floatingElement.style.left = pos.x + "px"; 209 floatingElement.style.top = pos.y + suchfeldHoehe + offset + "px"; 210 floatingElement.style.visibility = "hidden"; 211} 212 213// 214// Gibt die Position der Seite zurück, also um wieviele Pixel gescrolled wurde. 215// 216function getScrollPosition() 217{ 218 var scrOfX = 0, scrOfY = 0; 219 220 if( typeof( window.pageYOffset ) == 'number' ) 221 { 222 //Netscape compliant 223 scrOfY = window.pageYOffset; 224 scrOfX = window.pageXOffset; 225 } 226 else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 227 { 228 //DOM compliant 229 scrOfY = document.body.scrollTop; 230 scrOfX = document.body.scrollLeft; 231 } 232 else if( document.documentElement ) 233 { 234 //IE6 standards compliant mode 235 scrOfY = document.documentElement.scrollTop; 236 scrOfX = document.documentElement.scrollLeft; 237 } 238 239 var scrollPosition = new Object(); 240 scrollPosition.x = scrOfX; 241 scrollPosition.y = scrOfY; 242 243 return scrollPosition; 244} 245 246 247 248 249// 250// Gibt die Position der Seite zurück, also um wieviele Pixel gescrolled wurde. 251// 252function setScrollPosition(x,y) 253{ 254 window.scrollTo(x,y); 255} 256 257 258 259// 260// Gibt die Breite des Windows zurück 261// 262function getWindowWidth(win) 263{ 264 if (win == undefined) 265 win = window; 266 if (win.innerWidth) 267 { 268 return win.innerWidth; 269 } 270 else 271 { 272 if (win.document.documentElement && 273 win.document.documentElement.clientWidth) 274 { 275 return win.document.documentElement.clientWidth; 276 } 277 return win.document.body.offsetWidth; 278 } 279} 280 281 282// 283// Gibt die Höhe des Windows zurück 284// 285function getWindowHeight(win) 286{ 287 if (win == undefined) 288 win = window; 289 if (win.innerHeight) 290 { 291 return win.innerHeight; 292 } 293 else 294 { 295 if (win.document.documentElement 296 && win.document.documentElement.clientHeight) 297 { 298 return win.document.documentElement.clientHeight; 299 } 300 return win.document.body.offsetHeight; 301 } 302}
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.