ああ、私も11kのライブラリを食べるのが好きですよね?:)
注:以下は jQuery UI 1.8.5 用です。
とにかく、ここにかなりきれいな解決策があります:
// 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;
もちろん、それがどのように機能するかは次のとおりです。
- マウスの開始オフセットと最初に選択したハンドルの値を保存します
- ドラッグするときに、古い値とアクティブなハンドルの現在の値を比較し、開始位置が有効かどうかも確認します
- 違いがない場合は、アクティブなハンドルをさらにドラッグできた場合に違いがあるかどうかを確認します
- その場合、両方のハンドルが同じ値を持っているかどうかを確認します。つまり、それらは互いの上にあることを意味します
- 現在選択されているハンドルがまだドラッグされていないかどうかを確認します
- 最後に、すべてが正しい場合は、ハンドルを切り替えます
- ユーザーが値を変更した場合は、開始位置を無効にして、ハンドル間の切り替えが行われないようにします。
そして、あなたの喜びのためにここにあります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;
に保存してからui.diff
実行しますpatch -i ui.diff jquery-ui.js
。