ArtDenis
@ArtDenis
Разработчик сайтов и мобильных приложений

Как иправить draqger в Яндекс Картах, который при клике сползает вниз?

Здравствуйте, проблема следующая:

Из песочницы Яндекса взят урок https://tech.yandex.ru/maps/jsbox/2.1/dragger

Его же, запустил у себя на хостинге, и все ок:
2c20f2fc8f874651aaa419377e828271.png

Но, поместив этот урок у себя на сайте (в разработке), при нажатии на dragger, он сразу же уход на 5 000 пикселей вниз: d79a16c95b1a459ea85e25930eb2dfe1.png
Красным отмечено, где он был

Если ли какие-либо мысли, с чем это может быть связано? Буду рад любой помощи
PS: На сайте, чуть выше есть еще одна карта, но под другим ID
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
ArtDenis
@ArtDenis Автор вопроса
Разработчик сайтов и мобильных приложений
Нашелся ответ, нужно было больше думать)

Я подозревал, что все дело в position.
Если у элемента position:absolute, то координаты считаются от любого родителя с position, отличного от static. Если такого родителя нет, то от начала сайта.

Таким образом, сделав для всех родителей position: static, dragger начал работать корректно. Но меня это не устраивало, так как шаблон рушился.

Затем я нашел функцию, при которой происходила данная ошибка, и заменил ОДНО слово - offset() на position(), во второй строке данного кода:
function onDraggerStart(event) {
        var offset = markerElement.position(),
            position = event.get('position');
        // Сохраняем смещение маркера относительно точки начала драга.
        markerOffset = [
            position[0] - offset.left,
            position[1] - offset.top
        ];
        markerPosition = [
            position[0] - markerOffset[0],
            position[1] - markerOffset[1]
        ];

        applyMarkerPosition();
    }


Различия данных функций (offset() и position()), как раз таки отличаются тем, что offset - это координаты от начала сайта, а position() от родительского элемента.
Так как, наш dragger был position: absolute, а его родитель position:relative. Нам были необходимы координаты от родителя, что и решило мою проблему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы