mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
slider:
- when dragging a handle, the position of the relative click is respected (fixes #3972) - when dragging two range handles to 0, the slider was broken because the nearest handle would always be the first. Implemented a workaround. (fixes #3736)
This commit is contained in:
parent
bdf7d24cae
commit
bf6b493c90
@ -195,13 +195,26 @@ $.widget("ui.slider", $.extend({}, $.ui.mouse, {
|
|||||||
index = i;
|
index = i;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//workaround for bug #3736
|
||||||
|
if(o.range && (this.values(0) + this.values(1)) == 0) {
|
||||||
|
closestHandle = $(this.handles[++index]);
|
||||||
|
}
|
||||||
|
|
||||||
self._handleIndex = index;
|
self._handleIndex = index;
|
||||||
|
|
||||||
closestHandle
|
closestHandle
|
||||||
.addClass("ui-state-active")
|
.addClass("ui-state-active")
|
||||||
.focus();
|
.focus();
|
||||||
|
|
||||||
|
var offset = closestHandle.offset();
|
||||||
|
var mouseOverHandle = !$(event.target).parents().andSelf().is('.ui-slider-handle');
|
||||||
|
this.clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
|
||||||
|
left: event.pageX - offset.left + (parseInt(closestHandle.css('marginLeft')) || 0),
|
||||||
|
top: event.pageY - offset.top + (parseInt(closestHandle.css('marginTop')) || 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
normValue = this._normValueFromMouse(position);
|
||||||
this._slide(event, index, normValue);
|
this._slide(event, index, normValue);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -229,6 +242,7 @@ $.widget("ui.slider", $.extend({}, $.ui.mouse, {
|
|||||||
this._stop(event);
|
this._stop(event);
|
||||||
this._change(event);
|
this._change(event);
|
||||||
this._handleIndex = null;
|
this._handleIndex = null;
|
||||||
|
this.clickOffset = null;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -239,10 +253,10 @@ $.widget("ui.slider", $.extend({}, $.ui.mouse, {
|
|||||||
var pixelTotal, pixelMouse;
|
var pixelTotal, pixelMouse;
|
||||||
if ('horizontal' == this.orientation) {
|
if ('horizontal' == this.orientation) {
|
||||||
pixelTotal = this.elementSize.width;
|
pixelTotal = this.elementSize.width;
|
||||||
pixelMouse = position.x - this.elementOffset.left;
|
pixelMouse = position.x - this.elementOffset.left - (this.clickOffset ? this.clickOffset.left : 0);
|
||||||
} else {
|
} else {
|
||||||
pixelTotal = this.elementSize.height;
|
pixelTotal = this.elementSize.height;
|
||||||
pixelMouse = position.y - this.elementOffset.top;
|
pixelMouse = position.y - this.elementOffset.top - (this.clickOffset ? this.clickOffset.top : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
var percentMouse = (pixelMouse / pixelTotal);
|
var percentMouse = (pixelMouse / pixelTotal);
|
||||||
@ -303,8 +317,10 @@ $.widget("ui.slider", $.extend({}, $.ui.mouse, {
|
|||||||
handle: handle,
|
handle: handle,
|
||||||
value: newVal
|
value: newVal
|
||||||
});
|
});
|
||||||
if (allowed !== false)
|
if (allowed !== false) {
|
||||||
this._setData('value', newVal);
|
this._setData('value', newVal);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user