SVG-перестановка для группы с перекрывающимися элементами происходит дважды - PullRequest
4 голосов
/ 25 октября 2009

При присоединении функции к событию onmouseover для группы SVG <g>...</g> событие происходит один раз, каждый раз, когда указатель входит в элемент в группе.

Это происходит, даже если два элемента в группе появляются один внутри другого.

Например:

+-----+
|A ___|
|  |B |
|__|__|

Когда указатель входит в прямоугольник A и оттуда перемещается в прямоугольник B, не выходя из A, события onmouseover запускаются для группы G, которая содержит оба A и B.

Событие происходит только один раз, поэтому я не думаю, что оно связано с пузырями событий.

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

Есть обходной путь? Я правильно это делаю? Есть ли лучший способ?

Ответы [ 2 ]

4 голосов
/ 26 октября 2009

Звучит знакомо, я думаю, что пузырьки будут кусать вас в таких случаях.

Некоторые примеры из одной из моих презентаций SVG Open в 2008 году, в частности slide 17 , должны представлять интерес. Возможно, что что-то вроде событий mouseenter / mouseleave решит эту проблему, но они еще не включены в рекомендацию w3c.

Редактировать: Для ясности mouseenter и mouseleave находятся в DOM Level 3 Events рабочий проект.

0 голосов
/ 05 декабря 2014

Вы можете проверить, в каком элементе была мышь. Если она входит в определенную группу, игнорируйте событие мыши. Вот так:

function isRelated(e) { 
    if ($(e.relatedTarget).closest('#rect1,#rect2).length == 0) { //http://api.jquery.com/closest/
        return false;
    }
    return true;
}

Вот скрипка: http://jsfiddle.net/pFTfm/57/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...