Ah, me gusta comer a través de 11k libs, ¿no es así? :)
Nota: La siguiente es para jQuery UI 1.8.5
De todas formas, he aquí una solución bastante limpio:
// add some stuff to the slider instance
this._handleIndex = null;
this._handleStartValue = -1;
// remember the starting values in _mouseCapture
this._handleStartValue = this.values(this._handleIndex);
this._mouseDownOffset = this._normValueFromMouse({ x: event.pageX, y: event.pageY });
// modify _mouseDrag
oldValue = this.values(this._handleIndex),
curValue;
curValue = this.values(this._handleIndex);
if (curValue === oldValue && this._handleStartValue !== -1) {
if (normValue - this._mouseDownOffset > 0
&& (curValue === this.values((this._handleIndex + 1) % 2))
&& oldValue === this._handleStartValue) {
this._handleIndex = (this._handleIndex + 1) % 2;
}
} else {
this._handleStartValue = - 1
}
// reset everything in _mouseStop
this._handleIndex = null;
this._handleStartValue = -1;
Y eso es todo lo que hay que hacer, oh, cómo funciona Por supuesto:
- Guardar el desplazamiento, así como el valor del puntero del ratón a partir seleccionar inicialmente manejar
- Al arrastrar, compare el valor anterior con el valor actual del asa activa y también compruebe si la posición de inicio es válida
- En caso de que no haya diferencia, verificamos si hubiera una diferencia si el asa activa pudiera arrastrarse
- Si ese es el caso, comprobar si las dos asas tienen el mismo valor, eso significa que son una encima de la otra
- Ahora comprobamos si el mango del seleccionado en ese momento no ha sido arrastrado todavía
- Y, por último, si todo eso es cierto, cambiamos las asas
- En caso de que el usuario ahora cambie el valor invalidamos nuestra posición de inicio O que no hay más de conmutación entre los mangos
Y para su placer aquí hay un diff
:
9960c9960,9962
<
---
>
> this._handleIndex = null;
> this._handleStartValue = -1;
10215a10218,10219
> this._handleStartValue = this.values(this._handleIndex);
> this._mouseDownOffset = this._normValueFromMouse({ x: event.pageX, y: event.pageY });
10243c10247,10249
< normValue = this._normValueFromMouse(position);
---
> normValue = this._normValueFromMouse(position),
> oldValue = this.values(this._handleIndex),
> curValue;
10246c10252,10263
<
---
> curValue = this.values(this._handleIndex);
> if (curValue === oldValue && this._handleStartValue !== -1) {
> if (normValue - this._mouseDownOffset > 0
> && (curValue === this.values((this._handleIndex + 1) % 2))
> && oldValue === this._handleStartValue) {
>
> this._handleIndex = (this._handleIndex + 1) % 2;
> }
>
> } else {
> this._handleStartValue = - 1
> }
10257a10275,10276
> this._handleStartValue = -1;
> this._handleIndex = null;
Guardar a ui.diff
luego hacer patch -i ui.diff jquery-ui.js
.
Acabo de actualizar mi respuesta, consulte [aquí] (http://stackoverflow.com/questions/14091747/ui-slider-overlapping-slider-impossible-to-drag/38743988#38743988) –