});
});
-test( "#5009: scroll not working with parent's position fixed", function() {
+test( "scroll offset with fixed ancestors", function() {
expect( 2 );
var startValue = 300,
- element = $( "#draggable1" ).wrap( "<div id='wrapper' />" ).draggable({
- drag: function() {
- startValue += 100;
- $( document ).scrollTop( startValue ).scrollLeft( startValue );
- },
- stop: function( event, ui ) {
- equal( ui.position.left, 10, "left position is correct when parent position is fixed" );
- equal( ui.position.top, 10, "top position is correct when parent position is fixed" );
- $( document ).scrollTop( 0 ).scrollLeft( 0 );
- }
- });
+ element = $( "#draggable1" )
+ // http://bugs.jqueryui.com/ticket/5009
+ // scroll not working with parent's position fixed
+ .wrap( "<div id='wrapper' />" )
+ // http://bugs.jqueryui.com/ticket/9612
+ // abspos elements inside of fixed elements moving away from the mouse when scrolling
+ .wrap( "<div id='wrapper2' />" )
+ .draggable({
+ drag: function() {
+ startValue += 100;
+ $( document ).scrollTop( startValue ).scrollLeft( startValue );
+ },
+ stop: function( event, ui ) {
+ equal( ui.position.left, 10, "left position is correct when parent position is fixed" );
+ equal( ui.position.top, 10, "top position is correct when parent position is fixed" );
+ $( document ).scrollTop( 0 ).scrollLeft( 0 );
+ }
+ });
TestHelpers.forceScrollableWindow();
$( "#wrapper" ).css( "position", "fixed" );
+ $( "#wrapper2" ).css( "position", "absolute" );
element.simulate( "drag", {
dx: 10,
this.cssPosition = this.helper.css( "position" );
this.scrollParent = this.helper.scrollParent( true );
this.offsetParent = this.helper.offsetParent();
- this.offsetParentCssPosition = this.offsetParent.css( "position" );
+ this.hasFixedAncestor = this.helper.parents().filter(function() {
+ return $( this ).css( "position" ) === "fixed";
+ }).length > 0;
//The element's absolute position on the page minus margins
this.positionAbs = this.element.offset();
_mouseDrag: function(event, noPropagation) {
// reset any necessary cached properties (see #5009)
- if ( this.offsetParentCssPosition === "fixed" ) {
+ if ( this.hasFixedAncestor ) {
this.offset.parent = this._getParentOffset();
}