Как определить, когда элемент находится над другим элементом в JavaScript? - PullRequest
5 голосов
/ 07 марта 2012

Я написал большую часть кода ... И когда элемент "полностью" над другим элементом, он работает.Проблема в том, что я не просто хочу, чтобы он был истинным, когда элемент «полностью» над элементом, я также хочу, чтобы он был истинным, когда элемент частично находится над другим элементом.

мой код:

    element = this.element.getStyles('left', 'top', 'width', 'height');
    elementLeftX = element.left.toInt();
    elementLeftY = element.top.toInt();
    elementRightX = (element.width.toInt() + element.left.toInt());
    elementRightY = (element.top.toInt() + element.height.toInt());

    el = this.positions ? this.positions[i] : this.getDroppableCoordinates(el); // Element drop area
    elLeftX = el.left.toInt();
    elLeftY = el.top.toInt();
    elRightX = (el.width.toInt() + el.left.toInt());
    elRightY = (el.height.toInt() + el.top.toInt());

   if (((elLeftY <= elementLeftY) && (elementLeftY <= elRightY)) && ((elLeftY <= elementRightY) && (elementRightY <= elRightY))) {
        if (((elLeftX <= elementLeftX) && (elementLeftX <= elRightX)) && ((elLeftX <= elementRightX) && (elementRightX <= elRightX))) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }

Я очень смущен, я какое-то время играл и просто не могу заставить его работать.

Ответы [ 3 ]

13 голосов
/ 07 марта 2012

Стандартный метод видеоигры:

doElsCollide = function(el1, el2) {
    el1.offsetBottom = el1.offsetTop + el1.offsetHeight;
    el1.offsetRight = el1.offsetLeft + el1.offsetWidth;
    el2.offsetBottom = el2.offsetTop + el2.offsetHeight;
    el2.offsetRight = el2.offsetLeft + el2.offsetWidth;

    return !((el1.offsetBottom < el2.offsetTop) ||
             (el1.offsetTop > el2.offsetBottom) ||
             (el1.offsetRight < el2.offsetLeft) ||
             (el1.offsetLeft > el2.offsetRight))
};

См. Демонстрацию

0 голосов
/ 07 марта 2012

Когда вы пытаетесь это называется "обнаружение столкновений".Вам нужно получить СЧЕТЧИКИ и размеры элемента COMPUTED, а не только декларации стиля элемента.

Эта публикация может помочь объяснить:

Обнаружение столкновения jQuery / JavaScript

0 голосов
/ 07 марта 2012

Если вы заинтересованы в использовании jQuery (или если вы уже это делаете), есть несколько отличных плагинов для обнаружения столкновений.Вот предыдущий ответ, детализирующий один https://stackoverflow.com/a/6052254/374866

...