Как заставить значение ползунка jquery следовать за дескриптором, но не полностью?

#jquery #jquery-ui #slider

#jquery #jquery-ui #ползунок

Вопрос:

У меня есть ползунок jQuery, который должен быть размещен в узком столбце на странице. Идея в том, что значение должно следовать за дескриптором в виде всплывающей подсказки под ползунком. Я добился того, что это работает довольно хорошо, используя атрибут pageX «объекта события» в событии слайда jquery slider.

 $(element).css("left", event.pageX - ($(element).width() / 2)).text(ui.value);
  

Но проблема в том, что из-за того, что столбец довольно узкий, поэтому, когда я перетаскиваю ползунок на максимум, отображаемое значение будет размещено за пределами столбца. Или часть этого будет в любом случае.

Решение, которое я придумал, заключается в том, чтобы либо сделать ползунок короче. Но мой дизайнер, вероятно, будет жаловаться. Другое решение — убедиться, что отображаемое значение имеет более узкое поле перемещения, чем ползунок. Но я не уверен, как этого добиться.

Любые предложения о том, как я могу заставить свое значение аккуратно следовать за дескриптором. Но таким образом, чтобы оно не «выпадало»?

РЕДАКТИРОВАТЬ: Вот jsFiddle, который объясняет, как моя ситуация выглядит сегодня. Значение, которое следует внизу, выходит за пределы ширины столбца. Это я изобразил синим прямоугольником.

http://jsfiddle.net/nuPYa/2/

Комментарии:

1. Не могли бы вы создать jsFiddle или опубликовать URL-адрес тестового примера?

Ответ №1:

При вычислении положения вы можете легко установить ограничения:

 // Caching jQuery objects
var $element = $(element).text(ui.value);
var $container = $element.parent();

// Calculating new position
var newpos = event.pageX - $element.width() / 2;
newpos = Math.max(newpos, 0);
newpos = Math.min(newpos, $container.innerWidth() - $element.outerWidth());

$element.css('left', newpos);
  

Вычисление было разбито для удобства чтения. Приведенный выше код предполагает, что основной контейнер столбца является родительским для вашего элемента.

Ответ №2:

Сначала кэшируйте ваш $ object.

$element = $(element);

Тогда вместо использования атрибута event.pageX используйте $element.position().left . Помните, что это относится к родительскому относительному элементу. Поэтому вы можете захотеть использовать $element.offset().left