Ручка ползунка Scriptaculous не перемещается, когда ползунок находится над мультикартой
-
22-09-2019 - |
Вопрос
У меня есть Скриптообразный Слайдер отображающийся в модальном диалоговом окне над Мультимап.Проблема, с которой я сталкиваюсь, заключается в том, что на этой странице ручка ползунка не перемещается, если вы пытаетесь перетащить ее.Если я нажму на дорожку ползунка, маркер правильно перейдет к этой точке, и затем вы сможете использовать маркер для правильного перетаскивания.
Нажатие на дескриптор успешно регистрирует щелчок, насколько я могу console.log()
значение ползунка в этой точке.Попытка перетащить ползунок за его дескриптор просто продолжает регистрировать то же самое значение, и дескриптор не перемещается.
Слайдер корректно работает на любой странице, на которой нет multimap.
На страницах нет других фреймворков JS (только Prototype и Scriptaculous).
Хотя я действительно не уверен, что проблема в этом.Если бы слайдер ничего не регистрировал, тогда имело бы смысл, что карта каким-то образом была поверх или украла событие click.Но щелчки, очевидно, записываются.Я также не понимаю, почему нажатие на дорожку слайдера полностью устраняет проблему.
Может ли кто-нибудь указать мне правильное направление (либо с исправлением, либо с путем, по которому можно самостоятельно устранить проблему).
Вещи, которые я пробовал:
- Установка z-индекса ручки.
- Сделать модальный диалог видимым для начала (поскольку он изначально скрыт - я подумал, что это может быть связано с этот вопрос, но это не помогло).
Решение
Нашел проблему.
Как слайдер Scriptaculous, так и Multimap были определяющими Array.prototype.indexOf
но по-разному.
Решение (поскольку я хотел использовать только 1 дескриптор на слайдере) состояло в том, чтобы отредактировать slider.js
и измените вызовы на this.handles.indexOf
.
Index: slider.js
===================================================================
--- slider.js (revision 1)
+++ slider.js (working copy)
@@ -219,14 +219,14 @@
this.offsetY = (pointer[1] - offsets[1]);
} else {
// find the handle (prevents issues with Safari)
- while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ while((this.handles[0] != handle) && handle.parentNode)
handle = handle.parentNode;
-
- if (this.handles.indexOf(handle)!=-1) {
+
+ if (this.handles[0] == handle) {
this.activeHandle = handle;
- this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.activeHandleIdx = 0;
this.updateStyles();
-
+
var offsets = Position.cumulativeOffset(this.activeHandle);
this.offsetX = (pointer[0] - offsets[0]);
this.offsetY = (pointer[1] - offsets[1]);
Примечание для всех, кто использует это исправление: Хотя это исправление сделает так, что слайдер Scriptaculous и Multimaps смогут работать вместе на одной странице, оно сделает так, что будет работать только 1 дескриптор на слайдере.Я не проверял, что произойдет, если вы попытаетесь использовать это с 2 или более дескрипторами.