});
});
+test( "#5009: scroll not working with parent's position fixed", 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 despite overflow on HTML" );
+ equal( ui.position.top, 10, "top position is correct despite overflow on HTML" );
+ $( document ).scrollTop( 0 ).scrollLeft( 0 );
+ }
+ }),
+ contentToForceScroll = $( "<div>" ).css({
+ height: "20000px",
+ width: "20000px"
+ });
+
+ $( "#qunit-fixture" ).append( contentToForceScroll );
+ $( "#wrapper" ).css( "position", "fixed" );
+
+ element.simulate( "drag", {
+ dx: 10,
+ dy: 10,
+ moves: 3
+ });
+});
+
})( jQuery );
this._cacheMargins();
//Store the helper's css position
- this.cssPosition = this.helper.css("position");
+ this.cssPosition = this.helper.css( "position" );
this.scrollParent = this.helper.scrollParent();
+ this.offsetParent = this.helper.offsetParent();
+ this.offsetParentCssPosition = this.offsetParent.css( "position" );
//The element's absolute position on the page minus margins
this.offset = this.positionAbs = this.element.offset();
},
_mouseDrag: function(event, noPropagation) {
+ // reset any necessary cached properties (see #5009)
+ if ( this.offsetParentCssPosition === "fixed" ) {
+ this.offset.parent = this._getParentOffset();
+ }
//Compute the helpers position
this.position = this._generatePosition(event);
_getParentOffset: function() {
//Get the offsetParent and cache its position
- this.offsetParent = this.helper.offsetParent();
var po = this.offsetParent.offset();
// This is a special case where we need to modify a offset calculated on start, since the following happened: