Я создал «2d слайдер» в jQuery, в котором 2 параметра одновременно обрабатываются путем перетаскивания «маркера» в ограничивающей рамке.
Я реализовал это, вложив div «handle»внутри родительского div и использования плагина jQuery UI для облегчения перетаскивания.HTML выглядит так:
<div class="Slider2d" id="grid_spacing_both">
<div class="Slider2dHandle" id="grid_spacing_both_handle"></div>
</div>
JQuery выглядит следующим образом:
$(".Slider2dHandle").draggable({
containment: "parent",
scroll: false,
drag: function(event, ui) {
// calculates position and updates value input boxes
}
});
Я также создал некоторый код, который перемещает дескриптор в расположение любых кликов в родительском div:
$(".Slider2d").mousedown(function(event){
// get location of click and reposition handle to click location
});
Я хотел бы изменить вышеприведенный метод, чтобы пользователь мог щелкнуть где-нибудь в родительском элементе div, переместить маркер в положение щелчка, а затем начать перетаскивать маркер, не позволяякнопка мыши вверх.По сути, мне нужно найти способ программно активировать функцию перетаскивания.
Я нашел несколько предложений здесь и здесь , и попытался реализовать их рекомендации, изменив вышеуказанный метод следующим образом:
$(".Slider2d").mousedown(function(event){
// get location of click and reposition handle to click location
handle = $(".Slider2d").children(".Slider2dHandle");
handle.trigger(event);
});
Это работает в самом техническом смысле, но это очень медленно, и я получаю кучу сообщений об ошибках от Safari, говорящих мне: «RangeError: Превышен максимальный размер стека вызовов».Я думаю, что происходит, когда я запускаю событие на дескрипторе, оно всплывает до родителя, который затем вызывает триггер снова и так далее, и так далее.Я пытался остановить пузыриться, добавив в мой код событие.stopPropagation до и после вызова .trigger (), но безрезультатно.
Итак, если у кого-то есть какие-либо предложения о том, как это получитьработая, я действительно ценю это.У меня есть план резервного копирования здесь , но мне кажется, что это излишне сложно.
Спасибо!