Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Задача c тегом <g> в svg (https://javascript.ru/forum/dom-window/34602-zadacha-c-tegom-g-v-svg.html)

Kosty@n 11.01.2013 17:29

Задача c тегом <g> в svg
 
Вложений: 1
Здравствуйте, уважаемые пользователи форума.

Исходные данные :
есть svg файл, в котором очень много тегов <g> и объектов(line, polyline, circle и т. д. ) в них.
Задача:
При клике по объекту(line, polyline, circle и т. д. ), обвести красной рамкой родительский тэг <g>.

Проблема
Рамке присваиваются координаты, как у тега <g>, но она оказывается смещена вправо пикселей на 50


Вот мой скрипт. Полностью файл SVG есть в архиве в приложении.
document.documentElement.onclick = function(ev) {
    lightGr(ev)
}

/* определяем элемент, с которым было произведено действие 

*/
function targetEv(ev) {
    if (ev.target) {
        var targ = ev.target
    } else if (ev.srcElement) {
        var targ = ev.srcElement
    }
    return targ
}



function lightGr(ev) {
    //определяем элемент, с которым было произвдено действие
    var targ = targetEv(ev)
    //определяем элемент <g>

    if (targ.tagName == 'g') {
        var ourEl = targ
    } else if (targ.parentNode.tagName == 'g') {
        var ourEl = targ.parentNode
    }    
    if (ourEl) {
        newW = ourEl.getBBox().width
        newH = ourEl.getBBox().height
        newTr = ourEl.getAttribute('transform')
        console.log(newW + ' ' + newH)
        var lightR = document.createElementNS("http://www.w3.org/2000/svg", "rect")
        lightR.setAttribute('transform', newTr)
        lightR.setAttribute('width', newW)
        lightR.setAttribute('height', newH)
        lightR.setAttribute('fill', 'none')
        lightR.setAttribute('stroke', 'red')
        lightR.setAttribute('stroke-width', '1px')
        console.log(ourEl)
        console.log(lightR)
        document.documentElement.appendChild(lightR)
    }
    
}


Интересуют любые предложения, предположения, мысли. Возможно данная задача решается через CSS(я смог только добавить параметр opacity к тегу g)?

Kosty@n 14.01.2013 16:09

Единственно возможным решением, что нашел я. Было применение opacity.

Deff 14.01.2013 19:08

Цитата:

Сообщение от Kosty@n
Рамке присваиваются координаты, как у тега <g>, но она оказывается смещена вправо пикселей на 50

<style>
g {
  margin:0;
  padding:0;
}
<style>


Часовой пояс GMT +3, время: 05:33.