TL; DR. Хорошая новость в том, что это можно сделать!Плохая новость заключается в том, что вам нужно немного скорректировать код.Я набираю это в десять минут после полуночи, так что вам, скорее всего, потребуется рефакторинг этого, но я надеюсь, что это отправная точка.
Я расскажу о причинах реализации, но если выхочу просто в нее разобраться, я создал Codepen https://codepen.io/jamie-endeavour/pen/zyxPaY?editors=1010
немного фона
Когда я впервые нашел этот вопрос, я посмотрел документацию Sliderи заметил раздел о 'Reflow' - https://foundation.zurb.com/sites/docs/slider.html#reflow - после прочтения об этом методе я решил заглянуть в исходный код Foundation:
_reflow() {
this.setHandles();
}
Затем я посмотрел на setHandles()
...
setHandles() {
if(this.handles[1]) {
this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, () => {
this._setHandlePos(this.$handle2, this.inputs.eq(1).val(), true);
});
} else {
this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true);
}
}
Обратите внимание, что _setHandlePos()
делает ссылку на значение из свойства с именем inputs
.
Когда класс Slider инициализируется, устанавливаются следующие параметры:
this.inputs = this.$element.find('input');
this.$input = this.inputs.length ? this.inputs.eq(0) : $(`#${this.$handle.attr('aria-controls')}`);
В вашем примере вы не указали элемент ввода.Итак, как вы можете видеть, код использует значение aria-controls
для создания селектора «ввода».В этом и заключается ваше ограничение, поскольку вы не сможете таким образом связать два поля ввода с ползунком.
Решение
Итак, запомните троичнуюбыл использован в this.$input
?Если мы добавим <input>
в ваш элемент .slider
, то мы сможем использовать его как опорную точку для ползунка.
<div class="slider" data-slider data-initial-start="20" data-options="precision:3; decimal:3; start:8; end:36;" style="margin-top: 12px;">
<input type="hidden" id="slider-reference" value="8" />
...
Теперь, когда у вас есть ссылка, которую можно использовать между двумя входамиполя.Затем вы можете обновить значение этого ссылочного поля на обратной стороне обратного вызова change для каждого элемента, затем Slider прочитает это и обновит соответствующим образом.
JS, требуемый для ввода number
, довольно прост, поскольку мы поставляемабсолютное число, необходимое Slider для расчета ширины позиции.
Ввод дроби становится немного странным, потому что вам нужно возвращать дробь разности между вашим минимальным и максимальным значением (28), а не дробь вашего максимального значения (в данном случае 36).Вот почему я включил дополнительные вычисления, чтобы убедиться, что вы получаете правильную позицию относительно элемента Slider.Я также считаю, что эту часть можно реорганизовать свежим взглядом ?
Наконец, когда вы получили новые значения в каждом обработчике изменений, вы просто вызываете метод _reflow
, и это обновитПлагин слайдера, соответственно, без необходимости повторной инициализации плагина или чего-то еще такого неприятного!
Надеюсь, это поможет!