Получение левого и верхнего положения с помощью перетаскиваемого элемента управления

#javascript #jquery

Вопрос:

У меня на странице есть несколько компонентов, которые можно перетаскивать. У них есть возможность перетаскивания класса. Когда это перетаскивается и останавливается, мне нужно получить левую и верхнюю позиции

         function init() {
            var p = $('#groups-parent');
            $('.draggable').draggable({
                obstacle: ".obstacle",
                preventCollision: true,
                containment: [
                    p.offset().left, p.offset().top, p.offset().left   p.width() - 225, p.offset().top   p.height() - 50
                ], 
                start: function(event, ui) {
                    $(this).removeClass('obstacle');
                },
                stop: function (event, ui) {
                    console.log(ui);
                    $('#groups-parent').css({ 'min-height': Math.max(500, ui.position.top   50) });
                    $(this).addClass('obstacle');
                    
                    getTopLeftPosition();
                }
            });  
        }
 

Вот моя функция, которая должна получить левую и верхнюю позиции.

         function getTopLeftPosition(e) {
            var coordX = e.pageX - $(this).offset().left,
                coordY = e.pageY - $(this).offset().top;

            alert(coordX   ' , '   coordY);
        }
 

Это не работает. Все, что я получаю в своем браузере, — это это сообщение об ошибке

Не удается прочитать свойства неопределенного (чтение «слева»)

Как я могу получить эту левую и верхнюю позиции? В предупреждении должно быть указано на это.

Комментарии:

1. Будет .position() или .offset() не будет работать на вас?

2. Также вам нужно войти в event свою функцию, чтобы она работала.

3. Как это будет выглядеть, пожалуйста ? getTopLeftPosition(Событие e) ?

4. Вы также можете получить местоположение ui.position объекта.

Ответ №1:

Вам, вероятно, просто нужно привязаться this к функции, изменив

 getTopLeftPosition();
 

к любому

 getTopLeftPosition.call(this, event);
 

или

 getTopLeftPosition.bind(this)(event)
 

Комментарии:

1. На самом деле мне нужна позиция, которая будет выглядеть следующим образом слева: 430.25, вверху: 95.25. С приведенным выше кодом это дало мне что-то вроде 0,5390625, 20,7460375. Это правильно?

2. Ваше решение работает