Слайдер пользовательского интерфейса JQuery с несколькими ручками: как предотвратить пересечение ручек?

Я разрабатываю быстрое решение, которое использует ползунок с несколькими ручками для определения ширины динамического макета.

Я пытался использовать как ExtJS3, так и последний пользовательский интерфейс JQuery.

В ExtJS вы можете ограничивать дескрипторы, чтобы они не пересекались друг с другом, и это довольно интуитивный подход к нужному мне пользовательскому интерфейсу, однако есть причины, по которым я бы предпочел не использовать ExtJS для одного «острова» в море JQuery.

Итак, кто-нибудь знает о секретном атрибуте или фрагменте кода, который ограничивает несколько дескрипторов в ползунке JQuery?

Для ясности: если у вас ползунок с 2 ручками, одна на 40 и одна на 60; ограничение не позволит вам перетащить ручку с 60 до 20 без предварительного перемещения 40.


person Russ Clarke    schedule 17.08.2010    source источник


Ответы (5)


В событии слайда вы можете ограничить движение ручки, проверив значения ползунка и вернув значение true, чтобы разрешить слайд, или false, чтобы предотвратить его (дополнительную информацию см. в документации пользовательского интерфейса jQuery).

person Phil Hale    schedule 17.08.2010
comment
Да, это действительно работает - думаю, я просто надеялся на секретное ограничение: истинный параметр или что-то в этом роде :) На самом деле оказалось, что мне действительно нужно было просто отсортировать массив значений из ползунка, тогда пересечение не имело значения . Однако не беспокойтесь, ваш ответ был самым точным, так что вы получаете галочку, спасибо! - person Russ Clarke; 17.08.2010

Какой код вы используете для ползунка Jquery? Глядя на демонстрацию ползунка диапазона, он имеет две ручки, и их невозможно пересечь.

person madcapnmckay    schedule 17.08.2010
comment
Я использую слайдер пользовательского интерфейса JQuery, но я определил несколько ручек, всего до 6 может быть на панели. Я мог бы попробовать установить диапазон между каждой парой и не стилизовать его... - person Russ Clarke; 17.08.2010

Как указал @madcapnmckay, если у вас есть ползунок с двумя ручками и range: true в параметрах, ручки нельзя перетаскивать друг за другом.

У меня была проблема, когда он не ограничивал должным образом, но оказалось, что у меня была строка 'true' вместо логического true

person Randy    schedule 21.03.2012

Я немного опоздал на вечеринку, но я хотел поделиться своим самым компактным, но удобочитаемым способом сделать это. Технически это очень похоже на ответ @tototresde.

slide: function (e, ui) {
  // Prevent crossing and overlapping of slider handles.
  if (ui.values[(ui.handleIndex - 1)] >= ui.value ||
      ui.values[(ui.handleIndex + 1)] <= ui.value) {
    return false;
  }
}
person marcvangend    schedule 21.05.2017

Проверьте это решение:

slide : function( event, ui ) {
        //Actual Handle Selected
        var handleIndex = $(ui.handle).index()-1;

        var diffA, diffB;

        //Check with right handles
        if(handleIndex > 0)
            diffA = ui.values[handleIndex] - ui.values[handleIndex-1];

        //Check with left handles
        if(handleIndex < ui.values.length-1)
            diffB = ui.values[handleIndex+1] - ui.values[handleIndex];

        if (diffA <= 0 || diffB <= 0) { /*checks for the values and compares*/
            return false;
        }
   }
person todotresde    schedule 13.08.2012
comment
Вы действительно хотите, чтобы индекс первого дескриптора был равен -1? - person David Hobs; 07.09.2012
comment
Это фантастика... Мне интересно... прямо сейчас это предотвращает пересечение ручки влево, но вы все равно можете перетащить ручку за ручку вправо. Что было бы необходимо, чтобы предотвратить любое пересечение? - person Kirk Ross; 02.03.2015