Найдите элемент в SVG в Opera координатами

Как я определяю местоположение элемента в SVG в Opera, учитывая координаты?

elementFromPoint (x, y) хорошо работает с Firefox, но, кажется, перестал работать с Opera, возвращая всегда целый SVG а не конкретный элемент.

Можно было бы задаться вопросом, почему мне нужен он вообще. Ну, просто потому что я хотел бы выделить элемент SVG под курсором, и потому что Opera не запускает события, когда элемент под курсором добавляется/удаляется перед созданием перемещения с мышью. Таким образом, когда я добавляю новый элемент, он не выделяется, прежде чем я перемещу мышь немного, которая не выглядит хорошей.

С наилучшими пожеланиями, Mikhail.

5
задан Qnan 13 February 2010 в 23:58
поделиться

2 ответа

В Opera есть SVG1.1 SVGSVGElement.getIntersectionList .

var element= document.elementFromPoint(pageX, pageY);
if (element.localName.toLowerCase()=='svg' && 'getIntersectionList' in element) {
    var svgxy= Element_getPageXY(svg); // by the usual offsetLeft/offsetParent etc. method
    var rect= svg.createSVGRect();
    rect.x= pageX-svgxy[0];
    rect.y= pageY-svgxy[1];
    rect.width=rect.height= 1;
    var hits= svg.getIntersectionList(rect, null);
    if (hits.length>0)
        element= hits[hits.length-1];
}

[Непроверенный код, может даже работать.]

5
ответ дан 14 December 2019 в 19:12
поделиться

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

Для производственного кода вы должны добавить логику, чтобы позаботиться о ситуациях, когда элемент является ссылкой (с помощью target.correspondingUseElement, чтобы узнать идентификатор).

0
ответ дан 14 December 2019 в 19:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: