mark: Bug in Chrome und Opera? Rundungsfehler? Workaround?

Guten Abend,

Chrome (44.0.2403.157 m) und Opera (31.0) liefern mir wahrscheinlich "fehlerhafte" Werte für scrollLeft.

Ich habe ein Beispiel erstellt: http://jsfiddle.net/kw5jc13v/

Wenn man auf ein Element klickt werden zwei Werte berechnet und auf die Konsole ausgegeben:

var scrollLeftMax = e.target.scrollWidth - e.target.clientWidth;
var scrollLeftOnClick = e.target.scrollLeft;

Jedoch, wenn ich ganz nach rechts scrolle (scrollLeftMax) und erneut auf das Element klicke unterscheiden sich scrollLeftMax und scrollLeftOnClick manchmal um ein Pixel. Manchmal sind sie auch identisch. Wenn man die Seite mit STRG + "+" zoomt entstehen auch größere Differenzen von 3, 4, oder mehr Pixel.

Man sieht diese Lücke auch, wie in folgendem Bild. Man muss etwas rumprobieren bis Chrome oder Opera den Rundungsfehler machen, doch dann sieht's wie in folgendem Bild aus. Man beachte den gelben Platz zwischen den zwei Scrollbars (graue Flächen).

Platz zwischen Scrollbars

Meine Fragen nun:

  • Ist dies ein bekannter Bug, oder mach ich da was falsch?
  • Wie kann ich scrollLeftMax Browserübergreifend berechnen, oder das Pixelproblem beheben?

Im Moment behebe ich das Problem mit folgendem finsteren Hack:

if(scrollLeftMax - scrollLeftOnclick == 1 ){
   scrollLeftMax = scrollLeftOnclick;
}

Dies funktioniert aber nicht, bei gezoomtem Browserfenster. Der Fehler tritt übrigens auch bei scrollTop auf.

lg mark