]> source.dussan.org Git - jquery-ui.git/commitdiff
Position: Check for fraction support.
authorScott González <scott.gonzalez@gmail.com>
Wed, 2 Nov 2011 15:09:00 +0000 (11:09 -0400)
committerScott González <scott.gonzalez@gmail.com>
Wed, 2 Nov 2011 15:09:00 +0000 (11:09 -0400)
ui/jquery.ui.position.js

index 74530b9481d01bf9c080a405dd53b3e1e8bc691b..9a520f8453e4318fd7d922622186254353e157a4 100644 (file)
@@ -183,6 +183,12 @@ $.fn.position = function( options ) {
                position.left += myOffset[ 0 ];
                position.top += myOffset[ 1 ];
 
+               // if the browser doesn't support fractions, then round for consistent results
+               if ( !$.support.offsetFractions ) {
+                       position.left = Math.round( position.left );
+                       position.top = Math.round( position.top );
+               }
+
                collisionPosition = {
                        marginLeft: marginLeft,
                        marginTop: marginTop
@@ -406,6 +412,45 @@ $.ui.position = {
        }
 };
 
+// fraction support test
+(function () {
+       var testElement, testElementParent, testElementStyle, offsetLeft, i
+               body = document.getElementsByTagName( "body" )[ 0 ], 
+               div = document.createElement( "div" );
+
+       //Create a "fake body" for testing based on method used in jQuery.support
+       testElement = document.createElement( body ? "div" : "body" );
+       testElementStyle = {
+               visibility: "hidden",
+               width: 0,
+               height: 0,
+               border: 0,
+               margin: 0,
+               background: "none"
+       };
+       if ( body ) {
+               jQuery.extend( testElementStyle, {
+                       position: "absolute",
+                       left: "-1000px",
+                       top: "-1000px"
+               });
+       }
+       for ( i in testElementStyle ) {
+               testElement.style[ i ] = testElementStyle[ i ];
+       }
+       testElement.appendChild( div );
+       testElementParent = body || document.documentElement;
+       testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+       div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+       offsetLeft = $( div ).offset().left;
+       $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+       testElement.innerHTML = "";
+       testElementParent.removeChild( testElement );
+})();
+
 // DEPRECATED
 if ( $.uiBackCompat !== false ) {
        // offset option