01.01.2019, 18:14
|
Интересующийся
|
|
Регистрация: 18.02.2018
Сообщений: 26
|
|
Svg добавить path
На странице есть растянутое во всю ширину и высоту svg
<svg id="Arrows" width="100%" height="100%">
<defs>
<marker id="arrowhead" viewBox="0 0 10 10" refX="3" refY="5" markerWidth="6" markerHeight="6" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z"></path>
</marker>
</defs>
</svg>
Хочу на нем нарисовать между элементами коннектор
Делаю это таким скриптом
var drawConnector = function(A, B) {
var posnALeft = {
x: A.offsetLeft - 8,
y: A.offsetTop + A.offsetHeight / 2
};
var posnARight = {
x: A.offsetLeft + A.offsetWidth + 8,
y: A.offsetTop + A.offsetHeight / 2
};
var posnBLeft = {
x: B.offsetLeft - 8,
y: B.offsetTop + A.offsetHeight / 2
};
var posnBRight = {
x: B.offsetLeft + B.offsetWidth + 8,
y: B.offsetTop + A.offsetHeight / 2
};
var dStr =
"M" +
(posnARight.x ) + "," + (posnARight.y) + " " +
"C" +
(posnARight.x + 100) + "," + (posnARight.y) + " " +
(posnBLeft.x - 100) + "," + (posnBLeft.y) + " " +
(posnBLeft.x ) + "," + (posnBLeft.y);
var id = A.getAttribute('id') + "to" + B.getAttribute('id');
if (!document.getElementById(id)){
var path = document.createElement("path");
path.setAttribute("id", id);
path.setAttribute("fill","none");
path.setAttribute("stroke","black");
path.setAttribute("maker-end","url(#arrowhead)");
path = document.getElementById("Arrows").appendChild(path);
}
document.getElementById(id).setAttribute("d", dStr);
document.getElementById(id).innerHTML="ww";
};
Но добавленный path не отображается
Только когда в браузере удаляю его и вставляю через "Edit as HTML" он отображается, и то без стрелочки
Что я делаю не так и что надо делать, чтобы все отображалось?
|
|
01.01.2019, 18:20
|
Интересующийся
|
|
Регистрация: 18.02.2018
Сообщений: 26
|
|
То есть, все отображается нормально, если меняю HTML вручную
А скриптом ничего не отображается, хотя в код добавляется
|
|
01.01.2019, 18:28
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от grigandal
|
Что я делаю не так
|
createElementNS
setAttributeNS
|
|
01.01.2019, 18:58
|
Интересующийся
|
|
Регистрация: 18.02.2018
Сообщений: 26
|
|
рони,
То есть, если я правильно понял, нужно так?
ar path = document.getElementById(id);
if (!path){
path = document.createElementNS("http://www.w3.org/2000/svg","path");
path.setAttributeNS("http://www.w3.org/2000/svg","id", id);
path.setAttributeNS("http://www.w3.org/2000/svg","fill","none");
path.setAttributeNS("http://www.w3.org/2000/svg","stroke","black");
path.setAttributeNS("http://www.w3.org/2000/svg","stroke-width","2");
path.setAttributeNS("http://www.w3.org/2000/svg","maker-end","url(#arrowhead)");
document.getElementById("Arrows").appendChild(path);
}
console.log(document.getElementById(id));
path.setAttributeNS("http://www.w3.org/2000/svg","d", dStr);
Но все равно не отображается...
Последний раз редактировалось grigandal, 01.01.2019 в 19:10.
|
|
01.01.2019, 19:12
|
Интересующийся
|
|
Регистрация: 18.02.2018
Сообщений: 26
|
|
рони,
Работает без setAttributeNS
Но стрелочка все равно не отображается, только линия
|
|
01.01.2019, 19:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Последний раз редактировалось рони, 01.01.2019 в 19:55.
|
|
01.01.2019, 19:57
|
Интересующийся
|
|
Регистрация: 18.02.2018
Сообщений: 26
|
|
рони,
Вот так вроде работает
var path = document.getElementById(id);
if (!path){
path = document.createElementNS("http://www.w3.org/2000/svg","path");
document.getElementById("Arrows").appendChild(path);
path.setAttribute("id", id);
path.setAttribute("fill","none");
path.setAttribute("stroke","black");
path.setAttribute("stroke-width","2");
path.setAttribute("maker-end","url(#arrowhead)");
}
path.setAttribute("d", dStr);
Но не рисуются наконечники стрелочек
Что не так?
Последний раз редактировалось grigandal, 01.01.2019 в 20:00.
|
|
01.01.2019, 19:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от grigandal
|
Что не так?
|
|
|
01.01.2019, 20:01
|
Интересующийся
|
|
Регистрация: 18.02.2018
Сообщений: 26
|
|
рони,
Только там path.setAttribute("maker-end","url(#arrowhead)");
а не path.setAttributeNS("maker-end","url(#arrowhead)");
Случайно вставил
|
|
01.01.2019, 20:12
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
grigandal,
не знаю, что и как, вы хотите сделать.
могу только гадать, может нет элемента, может нет цвета или размера, может нарушен синтаксис.
|
|
|
|