Ручка ползунка Scriptaculous не перемещается, когда ползунок находится над мультикартой

StackOverflow https://stackoverflow.com/questions/2310852

Вопрос

У меня есть Скриптообразный Слайдер отображающийся в модальном диалоговом окне над Мультимап.Проблема, с которой я сталкиваюсь, заключается в том, что на этой странице ручка ползунка не перемещается, если вы пытаетесь перетащить ее.Если я нажму на дорожку ползунка, маркер правильно перейдет к этой точке, и затем вы сможете использовать маркер для правильного перетаскивания.

Нажатие на дескриптор успешно регистрирует щелчок, насколько я могу 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 или более дескрипторами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top