如何制作一个jquery ui滑块,其中两个手柄相互“推”?

时间:2012-07-20 18:33:51

标签: javascript jquery jquery-ui jquery-ui-slider

我想使用jquery ui制作一个带有两个手柄的滑块,这两个手柄之间保持最小的间距。如果左手柄试图越过右手柄,则应按下右手柄。反之亦然。这是一个例子(永远不要重复,这不重要):

http://jsfiddle.net/SP5VQ/

只要移动速度慢,它就能工作但如果鼠标移动得太快,则在“推动”方案中失败。我认为在'slider'事件中设置滑块值可能是错误的。

1 个答案:

答案 0 :(得分:4)

这很有用。我从$.ui.slider.prototype._slide复制了代码并删除了检查左手柄是否大于右手柄的部件。现在运作良好。

http://jsfiddle.net/Nk8ap/

        $.ui.slider.prototype._slide = function ( event, index, newVal ) {
          var otherVal,
            newValues,
            allowed;

          if ( this.options.values && this.options.values.length ) {
            otherVal = this.values( index ? 0 : 1 );
            if ( newVal !== this.values( index ) ) {
              newValues = this.values();
              newValues[ index ] = newVal;
              // A slide can be canceled by returning false from the slide callback
              allowed = this._trigger( "slide", event, {
                handle: this.handles[ index ],
                value: newVal,
                values: newValues
              } );
              otherVal = this.values( index ? 0 : 1 );
              if ( allowed !== false ) {
                this.values( index, newVal, true );
              }
            }
          } else {
            if ( newVal !== this.value() ) {
              // A slide can be canceled by returning false from the slide callback
              allowed = this._trigger( "slide", event, {
                handle: this.handles[ index ],
                value: newVal
              } );
              if ( allowed !== false ) {
                this.value( newVal );
              }
            }
          }
        }