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

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

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

Например:

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

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

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

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

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

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

Решение

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

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

Изменить . Чтобы быть понятным, mouseenter и mouseleave находятся в События DOM уровня 3 рабочий проект.

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

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

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/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top