Муседаун. Распространение на мероприятии братьев и сестер.

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

  •  26-10-2019
  •  | 
  •  

Вопрос

image

У меня есть 2 брата-брата с «Абсолютом положения», которые оба обрабатывают событие Mousedown. Как я могу запустить обработчик «div 1», когда я нажимаю на прозрачную область «Div 2» (на картинке.)

Это было полезно?

Решение

Если перекрывающиеся элементы динамичны, я не верю, что это возможно выполнить, используя регулярные пузырьки событий, поскольку эти два рассматривающихся элемента являются «братьями и сестрами».

У меня была та же проблема, и я смог решить ее с большим количеством хиттового поставщика, где я проверяю, находится ли положение мыши пользователя в той же области.

function _isMouseOverMe(obj){
    var t = obj.offset().top;
    var o = obj.offset().left;
    var w = obj.width();
    var h = obj.height();
    if (e.pageX >= o+1 && e.pageX <= o+w){
        if (e.pageY >= t+1 && e.pageY <= t+h){
            return true;
        }
    }
    return false
}

Другие советы

Вы захотите использовать 3 обработчика событий, один для Div1, один для Div2 и один для ContentArea. Справочник ContentArea должен прекратить распространение, чтобы обработчик Div2 не был вызван. Обработчик Div2 должен вызвать обработчик Div1:

function div1Click (e)
{
    // do something
}
function div2Click (e)
{
    div1Click.call(div1, e);
}
function contentAreaClick (e)
{
    e = e || window.event;
    if (e.stopPropagation) e.stopPropagation();
    e.cancelBubble = true;
    // do something
}
div1.onclick = div1Click;
div2.onclick = div2Click;
contentArea.onclick = contentAreaClick;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top