Android -> Chrome -> Javascipt -> window.scrollY kein exakter double-Wert?

j77639

Cadet 4th Year
Registriert
Apr. 2012
Beiträge
85
Hallo!
Der Titel ist evtl. etwas verwirrend, daher hier eine Erläuterung:
Wie ihr wahrscheinlich alle wisst, entspricht bei den heutigen high DPI devices ein CSS-Pixel ja nicht mehr einem realen Pixel.
Ein Beispiel: Displayauflösung beträgt 1080x1920 Pixel, CSS-Auflösung hingegen nur 360x640 Pixel (auf jeder Achse also nur 1/3).
Das Problem ist nun, dass wenn ich mit Javascript mithilfe von window.scrollY die gescrollten Pixel abfrage, nur die CSS-Pixel geliefert werden, also wenn real 6 Pixel gescrollt wurden, werden mir nur 2 angezeigt. Das wäre an sich kein Problem, wenn double-Werte (z. B. 10 reale Pixel gescrollt -> 3,33 Pixel werden ausgegeben) ausgegeben würden, das ist jedoch nicht der Fall.
Ich habe auf meiner Webseite ein Element, welches immer um die Hälfte der gescrollten Pixel verschoben werden soll, und dadurch, dass Chrome für Android nur Integer ausspuckt, ist das in Verbindung mit der Pixel-density ein echtes Problem, weil das Element immer stottert. Kein Wunder, schließlich wird die Position ja nur alle 3 Pixel verändert anstatt bei jedem.
Wie auch immer, hat jemand eine Idee, wie man das lösen kann? Am besten wäre einfach eine Möglichkeit, die exakte Zahl der gescrollten Pixel rausfinden zu können.

Beste Grüße!
 
Das hängt natürlich davon ab, wie dein Scroll-Aufruf implementiert ist.
Wenn deine Schleife immer einen Sprung von 3 Pixeln macht ist die Sache klar :D

Aber du kannst ja die Grenze beim Scrollen festlegen und dann den Wert um 1er-Schritte erhöhen, oder nicht?
 
Es gibt keine Schleife oder sonstwas. Ich hab im body-Tag einfach den onscroll Eventhandler der eine Funktion aufruft, die letztlich nur den header um die Hälfte der gescrollten Pixel verschiebt. Also <body onscroll="f()"> und im Script dann (vereinfacht) function f() {document.getElementsByTagName("header")[0].style.top = (window.scrollY / 2) + "px";}
Das Problem besteht wie gesagt bei hochauflösenden Android Smartphones (bei iPhones hab ich es nicht getestet) darin, dass schlichtweg window.scrollY ungenaue Werte liefert (nur Integer mit CSS-Pixelangabe) und dadurch das Scrollen nicht flüssig funktioniert (bzw. die Verschiebung des headers um genau zu sein). Hoffentlich ist das Problem jetzt klarer geworden? Wenn jemand ne Lösung hat, bitte her damit! :)
Viele Grüße!
 
Zurück
Oben